内容简介:在前面的日志收集中,都是使用的filebeat+ELK的日志架构。但是如果业务每天会产生海量的日志,就有可能引发logstash和elasticsearch的性能瓶颈问题。因此改善这一问题的方法就是filebeat+logstash+kafka+ELK,也就是将存储从elasticsearch转移给消息中间件,减少海量数据引起的宕机,降低elasticsearch的压力,这里的elasticsearch主要进行数据的分析处理,然后交给kibana进行界面展示
前言:
实验需求说明
在前面的日志收集中,都是使用的filebeat+ELK的日志架构。但是如果业务每天会产生海量的日志,就有可能引发logstash和elasticsearch的性能瓶颈问题。因此改善这一问题的方法就是filebeat+logstash+kafka+ELK,
也就是将存储从elasticsearch转移给消息中间件,减少海量数据引起的宕机,降低elasticsearch的压力,这里的elasticsearch主要进行数据的分析处理,然后交给kibana进行界面展示
实验架构图:
实验部属拓扑图:
整个过程是由filebeat收集本机日志——logstash(或集群)进行过滤处理——传送给kafka(或集群)进行存储——ELK工具之logstash再到kafka中获取数据——传给elk工具之elasticsearch分析处理——交给kibana展示。
这里部属的两个logstash扮演的角色和功能是不一样的。
因为实验机器是虚拟机,内存小,因此使用了四台机器,部属分布如下(试验机的内存最好在4G以上):
实验步骤
1、test101服务器部属tomcat并生成json格式日志
1.1 在test101服务器安装jdk+apachetomcat
jdk安装步骤省略,tomcat下载好安装包,解压即可。
1.2 修改tomcat配置,使之产生json格式日志
修改tomcat的配置文件 /usr/local/apache-tomcat-9.0.14/conf/server.xml ,注释掉原来的内容( 大概在160行 ):
#注释掉这几行: <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> --> #然后添加新的内容: <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="tomcat_access_log" suffix=".log" pattern="{"clientip":"%h","ClientUser":"%l","authenticated":" %u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":" %b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}" />
1.3 重启tomcat,访问10.0.0.101:8080
查看日志已经变成了json格式:
[root@test101 logs]# tailf tomcat_access_log.2018-12-23.log {"clientip":"10.0.0.1","ClientUser":"-","authenticated":" -","AccessTime":"[23/Dec/2018:16:01:35 -0500]","method":"GET / HTTP/1.1","status":"200","SendBytes":" 11286","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
1.4 创建elk的yum文件,安装filebeat
[root@test101 ~]# cat /etc/yum.repos.d/elk.repo [elastic-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md [root@test101 ~]# [root@test101 ~]# yum -y install filebeat
修改配置文件/etc/filebeat/filebeat.yml如下(去掉已经注释的内容,还剩下这面一部分:)
这里要手动改配置,不能清空文件直接粘贴下面的配置!
这里要手动改配置,不能清空文件直接粘贴下面的配置!
这里要手动改配置,不能清空文件直接粘贴下面的配置!
#=========================== Filebeat inputs ============================= filebeat.inputs: - type: log enabled: true paths: - /usr/local/apache-tomcat-9.0.14/logs/tomcat_access_log* #日志路径 json.keys_under_root: true #这两行是为了保证能传送json格式的日志 json.overwrite_keys: true #============================= Filebeat modules =============================== filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false #==================== Elasticsearch template setting ========================== setup.template.settings: index.number_of_shards: 3 #============================== Kibana ===================================== setup.kibana: #----------------------------- Logstash output -------------------------------- output.logstash: hosts: ["10.0.0.103:5044"] #================================ Procesors ===================================== processors: - add_host_metadata: ~ - add_cloud_metadata: ~
启动filebeat
[root@test101 ~]# systemctl start filebeat
2、test103服务器部属logstash+kafka
2.1 部属jdk+zookeeper+kafka
1)jdk部属省略
2)zookeeper安装:
[root@test103 ~]# tar xf zookeeper-3.4.13.tar.gz -C /usr/local/ [root@test103 conf]# cd /usr/local/zookeeper-3.4.13/conf/ [root@test103 conf]# mv zoo_sample.cfg zoo.cfg [root@test103 conf]# cd ../bin/ [root@test103 bin]# ./zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.13/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@test103 bin]# netstat -tlunp|grep 2181 tcp6 0 0 :::2181 :::* LISTEN 18106/java [root@test103 bin]#
3)kafka安装:
[root@test103 ~]# tar xf kafka_2.12-2.1.0.tgz [root@test103 ~]# mv kafka_2.12-2.1.0 /usr/local/kafka [root@test103 ~]# cd /usr/local/kafka/config/
修改server.properties,修改了两个地方:
listeners=PLAINTEXT://10.0.0.103:9092 zookeeper.connect=10.0.0.103:2181
启动kafka
[root@test103 config]# nohup /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties >/dev/null 2>&1 & [root@test103 config]# netstat -tlunp|grep 9092 tcp6 0 0 10.0.0.103:9092 :::* LISTEN 17123/java
2.2、部属logstash
1)同test101一样,创建elk的yum文件:
[root@test103 ~]# cat /etc/yum.repos.d/elk.repo [elastic-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md [root@test101 ~]#
2)部属服务,修改配置
[root@test103 ~]# yum -y install logstash
修改 /etc/logstash/logstash.yml 文件下面几项内容:
path.data: /var/lib/logstash path.config: /etc/logstash/conf.d http.host: "10.0.0.103" #本机IP path.logs: /var/log/logstash
创建收集日志文件
[root@test103 ~]# cd /etc/logstash/conf.d/
创建配置文件logstash-kafka.conf, 这个文件是在拿到filebeat推送过来的数据后,再推送给kafka :
[root@test103 conf.d]# cat logstash-kafka.conf input { beats { port => 5044 } } output { kafka { bootstrap_servers => "10.0.0.103:9092" #kafka 的IP地址 topic_id => "crystal" compression_type => "snappy" codec => json } } [root@test103 conf.d]#
3)测试启动logstash
[root@test103 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-kafka.conf -t WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console [WARN ] 2018-12-23 14:02:59.870 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified Configuration OK [INFO ] 2018-12-23 14:03:06.277 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash [root@test103 ~]#
测试OK,启动logstash:
[root@test103 ~]# nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-kafka.conf >/dev/null 2>&1 & [2] 18200 [root@test103 ~]# netstat -tlunp|grep 18200 #检查端口启动状况,OK tcp6 0 0 :::5044 :::* LISTEN 18200/java tcp6 0 0 127.0.0.1:9600 :::* LISTEN 18200/java [root@test103 ~]#
3、搭建ELK工具
3.1 test102服务器搭建jdk+logstash+elasticsearch
jdk部属省略
3.2 test102服务器安装logstash
1)yum安装logstash,修改 /etc/logstash/logstash.yml 文件下面几项内容:
path.data: /var/lib/logstash path.config: /etc/logstash/conf.d http.host: "10.0.0.102" path.logs: /var/log/logstash
2) 创建收集日志配置文件,这个文件是在kafka里面去拿数据,然后交给elasticsearch分析处理:
[root@test102 logstash]# cat /etc/logstash/conf.d/logstash-es.conf input { kafka { bootstrap_servers => "10.0.0.103:9092" topics => "crystal" codec => "json" consumer_threads => 5 decorate_events => true } } output { elasticsearch { hosts => [ "10.0.0.102:9200" ] index => "tomcat-log-%{+YYYY-MM-DD}" codec => "json" } } [root@test102 logstash]#
启动服务:
[root@test102 ~]# nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-es.conf >/dev/null 2>&1 &
3.3 test102服务器安装elasticsearch
yum安装elasticsearch,修改配置文件 /etc/elasticsearch/elasticsearch.yml 下面几行内容:
path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 10.0.0.102 http.port: 9200
启动服务:
[root@test102 config]# systemctl start elasticsearch [root@test102 config]# netstat -tlunp|grep 9200 tcp6 0 0 10.0.0.102:9200 :::* LISTEN 7109/java [root@test102 config]#
3.4 在test104服务器安装kibana
yum安装kibana,修改配置文件 /etc/kibana/kibana.yml 下面几行:
server.port: 5601 server.host: "10.0.0.104" elasticsearch.url: "http://10.0.0.102:9200" kibana.index: ".kibana"
启动服务
[root@test104 kibana]# systemctl start kibana [root@test104 kibana]# netstat -tlunp|grep 5601 tcp 0 0 10.0.0.104:5601 0.0.0.0:* LISTEN 11600/node [root@test104 kibana]#
4、日志收集测试
4.1 访问tomcat:10.0.0.101:8080产生日志
访问10.0.0.101:8080后,查看kibana的索引创建界面,已经有索引 tomcat-log-2018-12-357 。创建索引,选择“I don't want to use the Time Filter”,然后查看界面数据,已经有日志了,并且是json格式:
说明整个流程已经OK了。
同 《ELK收集Apache的json格式访问日志并按状态码绘制图表》 ,创建一个饼图添加到Dashboard:
刷新10.0.0.101:8080/dsfsdsd(界面不存在,会产生404的状态码),饼图会动态变化如下:
至此,filebeat+logstash+kafka+elk架构部属完成了。
以上所述就是小编给大家介绍的《海量日志下的日志架构优化:filebeat+logstash+kafka+ELK》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【第九期金融CIO论坛】日志易陈军:智能运维与海量日志分
- 【第九期金融CIO论坛】日志易陈军:智能运维与海量日志分
- 微服务海量日志怎么处理,推荐你试试这款工具....
- 海量数据搜索---搜索引擎
- 海量数据搜索——搜索引擎
- 海量数据业务有哪些优化手段?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Web Designer's Idea Book
Patrick Mcneil / How / 2008-10-6 / USD 25.00
The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!