Go运维开发之日志收集(1)收集应用程序日志到kafka中
一 , 需求背景
每个业务系统都有自己的⽇志,当业务系统出现问题时,需要通过查找⽇志信息来定位和解决问题。 当业务系统服务器⽐较少时,登陆到服务器上查看即可满⾜。但当系统机器规模巨⼤,登陆到服务器上查看⼏乎不现实(分布式的系统,⼀个系统部署在⼗⼏甚至几十台服务器上)
解决方案
把服务器上的⽇志实时收集,统⼀存储到中⼼系统。 再对这些⽇志建⽴索引,通过搜索即可快速找到对应的⽇志记录。 通过提供⼀个界⾯友好的web⻚⾯实现⽇志展示与检索。
业界方案
有早期的ELK到现在的EFK。ELK在每台服务器上部署logstash,比较重量级,所以演化成客户端部署filebeat的EFK,由filebeat收集向logstash中写数据,最后落地到elasticsearch,通过kibana界面进行日志检索。
业界方案ELK
优缺点
优点:现成的解决方案,直接拿过来用,能够实现日志收集与检索。
缺点:
运维成本⾼,每增加⼀个⽇志收集项,都需要⼿动修改配置。
监控缺失,⽆法准确获取logstash的状态。⽆法做到定制化开发与维护。
⽆法做到定制化开发与维护。
日志收集的整体架构:
LogAgent: 日志收集客户端,用来收集服务器上的日志。Kafka: 高吞吐量的分布式队列(Linkin开发,apache顶级开源项目) ElasticSearch: 开源的搜索引擎,提供基于HTTP RESTful的web接口。
Kibaa: 开源的ES数据分析和可视化工具。
Hadoop: 分布式计算框架,能够对大量数据进行分布式处理的平台。
Storm: -个免 费并开源的分布式实时计算系统。
日志收集系统设计
二:安装与启动
一: Mac版安装
brew install kafka
安装kafka是需要依赖于zookeeper的,所以安装kafka的时候也会包含zookeeper
kafka的安装目录:/usr/local/Cellar/kafka
kafka的配置文件目录:/usr/local/etc/kafka
kafka服务的配置文件:/usr/local/etc/kafka/server.properties
zookeeper配置文件: /usr/local/etc/kafka/zookeeper.properties
server.properties中的重要配置
broker.id=0
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://127.0.0.1:9092
log.dirs=/usr/local/var/lib/kafka-logs
zookeeper.properties
dataDir=/usr/local/var/lib/zookeeper
clientPort=2181
maxClientCnxns=0
二: 启动zookeeper
新起一个终端启动zookeeper
cd /usr/local/Cellar/kafka/1.0.0
./bin/zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
三: 启动kafka
新起一个终端启动zookeeper,注意启动kafka之前先启动zookeeper
cd /usr/local/Cellar/kafka/1.0.0
./bin/kafka-server-start /usr/local/etc/kafka/server.properties
四:创建topic
新起一个终端来创建主题
cd /usr/local/Cellar/kafka/1.0.0
创建一个名为“test”的主题,该主题有1个分区
./bin/kafka-topics --create
--zookeeper localhost:2181
--partitions 1
--topic test
五:查看topic
// 创建成功可以通过 list 列举所有的主题
./bin/kafka-topics --list --zookeeper localhost:2181
// 查看某个主题的信息
./bin/kafka-topics --describe --zookeeper localhost:2181 --topic
六:发送消息
新起一个终端,作为生产者,用于发送消息,每一行算一条消息,将消息发送到kafka服务器
> ./bin/kafka-console-producer --broker-list localhost:9092 --topic test
This is a message
This is another message
七:消费消息(接收消息)
新起一个终端作为消费者,接收消息
cd /usr/local/Cellar/kafka/1.0.0
> ./bin/kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
八:在生产者发送消息
在步骤六中新起的终端属于一条消息(任意字符),输入完回车就算一条消息,可以看到在步骤7中的消费者端就会显示刚才输入的消息
kafka应用场景
1. 异步处理, 把非关键流程异步化,提高系统的响应时间和健壮性
2. 应用解耦,通过消息队列,
zookeeper应用场景
- 服务注册与发现
- 配置中心
安装kafka
a. 安装JDK,从oracle下载最新的SDK安装
b. 安装zookeeper3.3.6,下载地址:http://apache.fayea.com/zookeeper/
1)mv conf/zoo_sample.cfg conf/zoo.cfg
2)编辑 conf/zoo.cfg,修改dataDir=D:\zookeeper-3.3.6\data
3)运行bin/zkServer.cmd
c. 安装kafka
1)打开链接:http://kafka.apache.org/downloads.html下载kafka2.1.2
2)打开config目录下的server.properties, 修改log.dirs为D:\kafka_logs,
修改advertised.host.name=服务器ip
3)启动kafka ./bin/windows/kafka-server-start.bat ./config/server.preperties
log agent流程