日志监控平台搭建 关于flume Kafka Elk
最近需要搭建一套日志监控平台,参考了新浪与美团的一些东西.现在实录一下搭建与优化调整的过程
目前把这几件放在一起的文档还不够多,其中相当一部分因为elk的升级配置也已经不能用了,更多的是单机版的配置,完全没有参考性.
优化的部分将等待项目与新平台正式上线在另一篇文章写出
拓扑图
软硬件配置
- 本机 ubuntu 14.04
- 线上 centos 6.5
host | 本地搭建 | 线上环境 |
---|---|---|
c1 | 1core 1g | 4core 8g |
c2 | 1core 1g | 4core 8g |
c3 | 1core 1g | 4core 8g |
c4 | 2core 4g | 8core 32g |
c5 | 2core 4g | 4core 32g |
c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|
jdk+scala+zk+kafka | 同左 | 同左 | jdk+es+logstash+kibana | jdk+es |
搭建
basic
新机器修改root密码sudo passwd
创建用户
useradd cluster
passwd cluster
chmod +w /etc/sudoers
vim /etc/sudoers
cluster ALL=(root)NOPASSWD:ALL
chmod -w /etc/sudoers
mkdir /home/cluster
mkdir /home/stack
chmod 777 /home/cluster
chmod 777 /home/stack
以上部分/home/stack用于存储所需所有tar.gz包
/home/cluster作为所有软件的安装目录
而后创建cluster目录下data目录,用于存放各组件配置,日志,数据
scp推荐工具ZOC7
同步各个机器的hosts
127.0.0.1 localhost
10.1.12.25 c1
10.1.12.23 c2
10.1.12.24 c3
10.1.12.27 c4
10.1.12.28 c5
分发各机器的rsa公钥
ssh-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh/authorized_keys
chmod 600 -R ~/.ssh/
各机器profile设置
tar -zxvf
sudo vim /etc/profile
export JAVA_HOME=/home/cluster/jdk
export ZK_HOME=/home/cluster/zookeeper
export KAFKA_HOME=/home/cluster/kafka
export SCALA_HOME=/home/cluster/scala
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:$KAFKA_HOME/bin:$SCALA_HOME/bin
替换系统默认java
sudo update-alternatives --install /usr/bin/java java /home/cluster/jdk/jre/bin/java 301
sudo update-alternatives --config java
java -version
前三台机器的cluster目录树
drwxr-xr-x 4 root root 4096 4月 20 14:34 data/
drwxr-xr-x 8 uucp 143 4096 3月 21 13:13 jdk/
drwxr-xr-x 7 root root 4096 4月 20 14:30 kafka/
drwxrwxr-x 6 cluster cluster 4096 3月 4 23:30 scala/
drwxr-xr-x 10 zy zy 4096 4月 20 14:13 zookeeper/
后两台机器的cluster目录树
drwxr-xr-x 4 zy root 4096 4月 21 17:23 data/
drwxrwxrwx 7 zy root 4096 4月 21 15:07 elasticsearch/
drwxr-xr-x 8 zy 143 4096 3月 21 13:13 jdk/
drwxr-xr-x 10 zy staff 4096 3月 29 06:46 kibana/
drwxr-xr-x 5 zy root 4096 4月 21 18:06 logstash/
开发环境下关闭防火墙
chkconfig iptables off && service iptables status或者
ufw disable或者
systemctl stop firewalld.service && systemctl disable firewalld.service && setenforce 0
非ubuntu机器关闭SELinux
修改 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled
selinux默认ubuntu不安装,iptables默认也是全开放的.可以用getenforce和iptables -L命令查看下两个组件的状态
同步各机器时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime或者
ntpdate cn.pool.ntp.org
zookeeper配置
修改conf目录下模板配置为zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/cluster/data/zookeeper
clientPort=2181
server.1= c1:2888:3888
server.2= c2:2888:3888
server.3= c3:2888:3888
而后
在配置的dataDir目录下创建一个myid文件,里面写入一个0-255之间的一个随意数字,每个zk上这个文件的数字要是不一样的,这些数字应该是从1开始,依次写每个服务器。
文件中序号要与dn节点下的zk配置序号一直,如:server.1=c1:2888:3888,那么dn1节点下的myid配置文件应该写上1
- 各节点启动:
bin/zkServer.sh start
- 查看节点状态与leader与否
bin/zkServer.sh status
- 查看java进程
jps
kafka配置
配置目录下
zookeeper.properties
dataDir=/home/cluster/data/zookeeper
clientPort=2181
maxClientCnxns=0
server.properties
############### Server Basics ###############
broker.id=0
############# Socket Server Settings #############
listeners=PLAINTEXT://:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
##############Log Basics ##############
log.dirs=/home/cluster/data/kafka/log
num.partitions=1
num.recovery.threads.per.data.dir=1
############ Log Retention Policy ###############
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
############## Zookeeper ###############
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
producer.properties
############### Producer Basics ##############
metadata.broker.list=c1:9092,c2:9092,c3:9092
producer.type=sync
compression.codec=none
serializer.class=kafka.serializer.DefaultEncoder
consumer.properties
zookeeper.connect=c1:2181,c2:2181,c3:2181
zookeeper.connection.timeout.ms=6000
group.id=cluster-consumer-group
- 启动
nohup bin/kafka-server-start.sh config/server.properties &
- 依然jps
jps
测试
本部分的分片partitions有待调整,分布式的logstash需要分片的消息,否则会出现消息顺序错误
leader上执行
bin/kafka-topics.sh --zookeeper c1:2181,c2:2181,c3:2181 --topic tt_topic --replication-factor 3 --partitions 3 --create
bin/kafka-topics.sh --zookeeper c1:2181,c2:2181,c3:2181 --topic tt_topic --describe
leader消息发送
bin/kafka-console-producer.sh --broker-list c1:9092,c2:9092,c3:9092 --topic tt_topic
从者消息消费
bin/kafka-console-consumer.sh --zookeeper c1:2181,c2:2181,c3:2181 --from-beginning --topic tt_topic
elasticsearch配置
修改es文件夹所属用户组 chown -R cluster /home/cluster/elasticsearch
修改data文件夹所属用户组 chown -R cluster /home/cluster/data
es配置
cluster.name: elasticsearch
node.name: c4
path.data: /home/cluster/data/elasticsearch/data
path.logs: /home/cluster/data/elasticsearch/log
bootstrap.mlockall: true
//这行一定要填ip
network.host: 10.1.12.27
http.port: 9200
discovery.zen.ping.unicast.hosts: ["c4", "c5"]
discovery.zen.minimum_master_nodes: 2
安装插件
bin/plugin install mobz/elasticsearch-headbin/plugin install lmenezes/elasticsearch-kopfbin/plugin install lukas-vlcek/bigdesk
- 运行
bin/elasticsearch -d
- 状态查看
http://10.1.12.27:9200/_plugin/head/
kibana配置
基本设置需要修改的部分
server.port: 5601
server.host: "c4"
elasticsearch.url: "http://c4:9200"
- 启动
nohup bin/kibana &
- 访问
http://10.1.12.27:5601
logstash配置
修改ruby源,修改Gemfile文件https://ruby.taobao.org
安装插件
bin/logstash-plugin install logstash-input-kafka
bin/logstash-plugin install logstash-output-elasticsearch
新建kafka-logstash-es.conf
置于cluster/data/logstash/conf目录下
input {kafka {zk_connect => "c1:2181,c2:2181,c3:2181"group_id => "cluster-consumer-group"topic_id => "tt_topic"reset_beginning => false consumer_threads => 5 decorate_events => true codec => "plain"}}
output {elasticsearch {hosts => ["c4:9200","c5:9200"]index => "logstash-log-%{+YYYY.MM.dd}"workers => 5codec => "json"}}
测试配置文件
bin/logstash -f /home/cluster/data/logstash/conf/kafka-logstash-es.conf --configtest
运行
nohup bin/logstash -f /home/cluster/data/logstash/conf/kafka-logstash-es.conf &
这个平台搭建的后期我遇见了新的需求,对flume的定制需求越来越多,如果你不想面对这种情况,那么可以这样:
bin/logstash-plugin install logstash-input-log4j
bin/logstash-plugin install logstash-output-kafka
把flume的部分替换成使用logstash来进行:
input{log4j {mode => "server"host => "[c1/c2/c3]"port => 4560}
}output{kafka {bootstrap_servers => "c1:9092,c2:9092,c3:9092"topic_id => "tt_topic"workers => 5codec => "plain"}
}
同样在log4j中配置新的SocketAppender指向挂在logstash集群前的负载均衡.
<appender name="LOGSTASH-APPENDER" class="org.apache.log4j.net.SocketAppender"><param name="remoteHost" value="lb1" /><param name="port" value="4560" /><param name="Threshold" value="INFO" /><param name="ReconnectionDelay" value="1000" /><param name="LocationInfo" value="true" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss}-[%p]-[%l]-%m%n" /></layout></appender>
想要使用多个 logstash 端协同消费同一个 topic 的话,那么需要把两个或是多个 logstash 消费端配置成相同的 group_id 和 topic_id
但是前提是要把相应的 topic 分多个 partitions (区),多个消费者消费是无法保证消息的消费顺序性的
查看后台任务 jobs
杀掉后台任务 kill %number
flume配置
- 确定jdk
- 上传stack
- 同步hosts
flume-env.sh
export JAVA_HOME=/opt/software/java
export JAVA_OPTS="-Xms1024m -Xmx2048m"
flume-kafka.properties
ag1.sources=src1 src2
ag1.sinks=sink1
ag1.channels=chn1ag1.sources.src1.type = exec
ag1.sources.src1.shell = /bin/bash -c
ag1.sources.src1.command = tail -F tt.log
ag1.sources.src1.channels = chn1ag1.sources.src2.type = exec
ag1.sources.src2.shell = /bin/bash -c
ag1.sources.src2.command = tail -F tt.log
ag1.sources.src2.channels = chn1ag1.channels.chn1.type = memory
agent.channels.chn1.keep-alive = 60
ag1.channels.chn1.capacity = 1000
ag1.channels.chn1.transactionCapacity = 100ag1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
ag1.sinks.sink1.topic = tt_topic
ag1.sinks.sink1.brokerList = c1:9092:c2:9092:c2:9092
ag1.sinks.sink1.channel = chn1
启动
bin/flume-ng agent -n ag1 -c conf -f conf/flume-kafka.properties
初步成果
初步成果如图,我们成功把22台机器的agent安好,获得了应用集群上的指定日志内容,后续的优化包括
- 性能
- 日志filter
- 存储/压缩/备份
- visualize与dashboard配置
- 更多可视化插件安装
日志监控平台搭建 关于flume Kafka Elk相关推荐
- 基于ELK搭建网站实时日志监控平台
基于ELK搭建网站实时日志监控平台 1 为什么要用到ELK 早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail.如果服务部署了好几台,就要分 ...
- ELK搭建(五):linux系统日志监控平台搭建
0. 引言 现在的生产系统多使用linux系统,在实际生产过程中我们除了需要监控一些业务日志之外,有时也需要监控linux系统本身的日志,来帮助我们进行一些排错和判断.那么这一期,我们就针对linux ...
- ELK日志监控系统搭建
ELK日志监控系统搭建 一.安装Elasticsearch: https://es.xiaoleilu.com/index.html 1.下载elasticsearch安装文件,官网下载地址:htt ...
- 阿里云使用笔记-第六篇-CentOS搭建Sentry日志监控平台
一,前言 由于前端项目运行在用户各自电脑的浏览器上, 对于浏览器差异所导致的问题,正常情况下是没有办法拿到的 我们可以使用日志监控平台对客户端产生的问题进行收集统计,以便及时处理搭建Sentry(哨兵 ...
- 腾讯SNG全链路日志监控平台之构建挑战
作者丨吴树生:腾讯高级工程师,负责SNG大数据监控平台建设.近十年监控系统开发经验,具有构建基于大数据平台的海量高可用分布式监控系统研发经验. 导语:当前SNG全链路日志监控平台每日数据存储量10TB ...
- 腾讯 SNG 全链路日志监控平台之构建挑战
原文地址:https://www.v2ex.com/t/406689 作者丨吴树生:腾讯高级工程师,负责 SNG 大数据监控平台建设.近十年监控系统开发经验,具有构建基于大数据平台的海量高可用分布式监 ...
- Nagios 监控平台搭建实验
Nagios 监控平台搭建实验 前言 本文重点在于NagioS监控平台的工作原理与运行原理,后面会将详细的搭建流程展示,如有错误和遗漏的地方,欢迎大家指正,谢谢. 基础理论说明 Nagios是什么? ...
- ElasticSearch实战-日志监控平台
1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件--ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...
- RocketMQ 实战 集群监控平台搭建
RocketMQ 实战 集群监控平台搭建 概述 RocketMQ有一个对其扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫rocketmq-consol ...
最新文章
- 用g++编译生成动态连接库*.so的方法及连接(dlopen() dlsym() dlclose())
- MyBatis Plus——自定义配置——自定义属性——注入时间
- 盘点三个JavaScript案例——实现限时秒杀、定时跳转、改变盒子大小
- R中统计假设检验总结(一)
- cmd 获取ftp没反应_python笔记13-执行cmd指令
- Codeforces 455B A Lot of Games 字典树上博弈
- SocketTool
- 陈玉琴答问: 经络按摩与敲胆经(转载)
- Udacity DNN
- 万字总结Linux内核过滤框架(Nftables)
- 漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
- 2018最新微信小程序经典案例开发视频教程合集
- 京东购物车的原理及Java实现
- 局域网用户的限制和反限制技巧
- 【原创】10元买啤酒2个空瓶换一瓶4个瓶盖换一瓶经典算法
- 【PM 产品】读人人都是产品经理有感 — Part one
- 最新云赏视频付费打赏平台源码V8.1(带详细安装教程)
- 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能
- 【动画】开头卷轴1——草图
- 解决Desktop Qt5.12.1 MSVC2015 64bit kits不识别