最近需要搭建一套日志监控平台,参考了新浪与美团的一些东西.现在实录一下搭建与优化调整的过程

目前把这几件放在一起的文档还不够多,其中相当一部分因为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 &
  • 依然jpsjps

测试

本部分的分片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相关推荐

  1. 基于ELK搭建网站实时日志监控平台

    基于ELK搭建网站实时日志监控平台 1 为什么要用到ELK 早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail.如果服务部署了好几台,就要分 ...

  2. ELK搭建(五):linux系统日志监控平台搭建

    0. 引言 现在的生产系统多使用linux系统,在实际生产过程中我们除了需要监控一些业务日志之外,有时也需要监控linux系统本身的日志,来帮助我们进行一些排错和判断.那么这一期,我们就针对linux ...

  3. ELK日志监控系统搭建

    ELK日志监控系统搭建 一.安装Elasticsearch: https://es.xiaoleilu.com/index.html  1.下载elasticsearch安装文件,官网下载地址:htt ...

  4. 阿里云使用笔记-第六篇-CentOS搭建Sentry日志监控平台

    一,前言 由于前端项目运行在用户各自电脑的浏览器上, 对于浏览器差异所导致的问题,正常情况下是没有办法拿到的 我们可以使用日志监控平台对客户端产生的问题进行收集统计,以便及时处理搭建Sentry(哨兵 ...

  5. 腾讯SNG全链路日志监控平台之构建挑战

    作者丨吴树生:腾讯高级工程师,负责SNG大数据监控平台建设.近十年监控系统开发经验,具有构建基于大数据平台的海量高可用分布式监控系统研发经验. 导语:当前SNG全链路日志监控平台每日数据存储量10TB ...

  6. 腾讯 SNG 全链路日志监控平台之构建挑战

    原文地址:https://www.v2ex.com/t/406689 作者丨吴树生:腾讯高级工程师,负责 SNG 大数据监控平台建设.近十年监控系统开发经验,具有构建基于大数据平台的海量高可用分布式监 ...

  7. Nagios 监控平台搭建实验

    Nagios 监控平台搭建实验 前言 本文重点在于NagioS监控平台的工作原理与运行原理,后面会将详细的搭建流程展示,如有错误和遗漏的地方,欢迎大家指正,谢谢. 基础理论说明 Nagios是什么? ...

  8. ElasticSearch实战-日志监控平台

    1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件--ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...

  9. RocketMQ 实战 集群监控平台搭建

    RocketMQ 实战 集群监控平台搭建 概述 RocketMQ有一个对其扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫rocketmq-consol ...

最新文章

  1. 用g++编译生成动态连接库*.so的方法及连接(dlopen() dlsym() dlclose())
  2. MyBatis Plus——自定义配置——自定义属性——注入时间
  3. 盘点三个JavaScript案例——实现限时秒杀、定时跳转、改变盒子大小
  4. R中统计假设检验总结(一)
  5. cmd 获取ftp没反应_python笔记13-执行cmd指令
  6. Codeforces 455B A Lot of Games 字典树上博弈
  7. SocketTool
  8. 陈玉琴答问: 经络按摩与敲胆经(转载)
  9. Udacity DNN
  10. 万字总结Linux内核过滤框架(Nftables)
  11. 漏洞分析丨HEVD-0x6.UninitializedStackVariable[win7x86]
  12. 2018最新微信小程序经典案例开发视频教程合集
  13. 京东购物车的原理及Java实现
  14. 局域网用户的限制和反限制技巧
  15. 【原创】10元买啤酒2个空瓶换一瓶4个瓶盖换一瓶经典算法
  16. 【PM 产品】读人人都是产品经理有感 — Part one
  17. 最新云赏视频付费打赏平台源码V8.1(带详细安装教程)
  18. 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能
  19. 【动画】开头卷轴1——草图
  20. 解决Desktop Qt5.12.1 MSVC2015 64bit kits不识别

热门文章

  1. 计算机考试客户端无法交卷,卓帆信息技术考试系统安装以后不能交卷,是什 – 手机爱问...
  2. 封仲淹:OceanBase社区版4.0未来畅想
  3. 【prism】专属代码片段snippet
  4. 入手iphone XR体验
  5. Linux Ubuntu VM15虚拟机安装VMwareTools新手教程
  6. 代码雨的实现 linux or html
  7. 权限管理系统6—业务功能实现—1分页查询
  8. WFE and WFI
  9. 针对图片实现VR效果及360全景图片
  10. Linux性能优化一:CPU优化以及平均负载的理解