飞道的博客

ELKB 7.X 日志系统搭建

539人阅读  评论(0)

目录

ELKB是什么

搭建ELKB系统

搭建过程中需要注意的问题


ELKB是什么

ELKB是目前比较流行的日志系统解决方案,是通过一套组件集合成的解决方案。这套组件分别为ElasticSearch,LogStash,Kibana,FileBeat。

各组件的作用如下:

ElasticSearch(简称es):基于Apache Lucene构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。

LogStatsh:数据收集额外处理和数据引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置。

Kibanna:数据分析和可视化平台。通常与ElasticSearch配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。

FileBeat:在需要采集日志数据的server上安装Filebeat,指定日志目录或日志文件后,Filebeat就能读取数据,发送到Logstash进行解析,也可以选择直接发送到ElasticSearch进行集中式存储和分析。 其中FileBeat只是Beat系列中常用的一种,其余的beat还有Packetbeat(搜集网络流量数据);Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);Filebeat(搜集文件数据);Winlogbeat(搜集 Windows 事件日志数据)

ELKB基础版架构

 

各模块架构优化

  • 对ElasticSearch做集群化
  • 将上述各个模块部署在不同的服务器上,LogStash选择计算能力强的,CPU和内存比较丰满的;ElasticSearch选择磁盘容量大的,同时CPU和内存比较丰满。

搭建ELKB系统

es依赖于JDK,同时已经内置JDK,但是如果本地配置了JAVA_HOME,则会使用配置的JDK,此时需要考虑到版本依赖,对应的版本依赖可以在https://www.elastic.co/cn/support/matrix#matrix_jvm进行查看;

目前ELKB已经实现版本同步化,所以在进行搭建时,选好一个版本,所有的组件都使用此版本即可。

在这里,选择7.6.2的版本进行搭建,对应的jdk版本是11,所以需要首先安装jdk11jdk11的安装步骤这里不做演示。同时,由于只是测试环境,所有不再进行模块优化,只在一台机器上,选择基础架构进行搭建。

1:下载组件

官方下载网站是https://elasticsearch.cn/download,但是由于某些神奇的力量,直接上官网下载是很慢的,所以可以找一些镜像网站进行下载。

华为镜像网站直通车(推荐加入你们的收藏夹)

在服务器上下载对应的组件:


  
  1. # 切换至下载目录
  2. cd /tmp
  3. # 下载es
  4. wget https:/ /mirrors.huaweicloud.com/elasticsearch /7.6.2/elasticsearch- 7.6. 2-linux-x86_64.tar.gz
  5. # 下载logstash
  6. wget https:/ /mirrors.huaweicloud.com/logstash /7.6.2/logstash- 7.6. 2.tar.gz
  7. # 下载kibana
  8. wget https:/ /mirrors.huaweicloud.com/kibana /7.6.2/kibana- 7.6. 2-linux-x86_64.tar.gz
  9. # 下载filebeat
  10. wget https:/ /mirrors.huaweicloud.com/filebeat /7.6.2/filebeat- 7.6. 2-linux-x86_64.tar.gz

 

2:解压


  
  1. # 解压es
  2. tar -zxvf elasticsearch -7.6 .2-darwin-x86_64.tar.gz -C /home/elkb
  3. # 解压logstash
  4. tar -zxvf logstash -7.6 .2.tar.gz -C /home/elkb
  5. # 解压kibana
  6. tar -zxvf kibana -7.6 .2-darwin-x86_64.tar.gz -C /home/elkb
  7. # 解压filebeat
  8. tar zxvf filebeat -7.6 .2-darwin-x86_64.tar.gz -C /home/elkb

 

3:配置各个组件,启动

首先创建用户,后续用这个用户进行操作


  
  1. # 创建启动用户elkb(不能以roog启动)
  2. useradd elkb
  3. # 修改密码
  4. passwd elkb
  5. chown -R elkb:elkb /home/elkb

配置es

在es的安装目录下创建data目录


  
  1. cd /home/elkb/elasticsearch- 7.6. 2
  2. mkdir data

修改配置文件


  
  1. cd config
  2. vim elasticsearch .yml

修改其中以下选项


  
  1. # 集群名称
  2. cluster.name: elkb
  3. # 节点名称
  4. node.name: elkb-node-1
  5. # master节点,此处单台,直接用节点名称即可
  6. cluster.initial_master_nodes: elkb-node-1
  7. # es的数据存储目录,默认在es_home/data目录下
  8. path.data: /home/elkb/elasticsearch-7.6.2/data
  9. # 日志存储目录,默认在es_home/logs目录下
  10. path.logs: /home/elkb/elasticsearch-7.6.2/logs
  11. # 锁定物理内存地址,防止elasticsearch内存被交换出去,也就是免es使用swap交换分区
  12. bootstrap.memory_lock: false
  13. bootstrap.system_call_filter: false
  14. # 允许访问的ip地址
  15. network.host: 0.0.0.0
  16. # 对外端口
  17. http.port: 9200
  18. # 是否允许跨域
  19. http.cors.enabled: true
  20. http.cors.allow-origin: "*"
  21. # 自动创建索引的设置 -是禁止自动创建,+是允许创建,多个索引以“,”号隔开
  22. action.auto_create_index: + log*,+.watches*,+.triggered_watches,+.watcher-history-*,+.kibana*,+.monitoring*,+logstash*

配置本机文件

修要修改linux的一些文件配置,否则会出现如下类似的错误。 


  
  1. vi /etc/security/limits.conf
  2. # 添加如下设置
  3. * soft nofile 65536
  4. * hard nofile 131072
  5. * soft nproc 2048
  6. * hard nproc 4096
  7. # centos 7 为 20-nproc.conf centos 6 为 90-nproc.conf
  8. vi /etc/security/limits.d/ 20-nproc.conf
  9. #修改为
  10. * soft nproc 4096
  11. vi /etc/sysctl.conf
  12. # 添加下面配置:
  13. vm.max_map_count= 655360
  14. # 让内核参数生效
  15. sysctl -p

启动es


  
  1. cd /home/elkb/elasticsearch-7.6.2/
  2. nohup /home/elkb/elasticsearch-7.6.2/bin/elasticsearch &

如果出现This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To bypass this problem by running Elasticsearch without machine learning functionality set [xpack.ml.enabled: false]错误 

在配置文件上加上以下配置:


  
  1. # 禁用 X-Pack机器学习功能
  2. xpack .ml .enabled: false

验证es

curl http://192.168.0.137:9200

 


配置kibana

修改配置文件


  
  1. cd /home/elkb/kibana-7.6.2-linux-x86_64/config/
  2. vi kibana.yml
  3. # 修改以下配置
  4. # Kibana端口
  5. server.port: 5601
  6. # kibana地址
  7. server.host: "192.168.0.137"
  8. server.name: "192.168.0.137"
  9. # es地址
  10. elasticsearch.hosts: [ "http://192.168.0.137:9200"]
  11. # 把kibanna的搜索作为es的一个index
  12. kibana.index: ".kibana"

启动kibana

nohup /home/elkb/kibana-7.6.2-linux-x86_64/bin/kibana &

验证

访问http://192.168.0.137:5601/展示kibana首页

 


配置logstash

logstash的语法是区段 input {},filter {},output {}。

流程是搜集=》过滤=》处理。

修改配置文件


  
  1. # 复制基础配置文件
  2. cd /home/elkb/logstash -7.6 .2/config
  3. cp logstash-sample.conf logstash-log.conf
  4. # 修改配置文件如下
  5. vi logstash-log.conf
  6. # ==================开始===================
  7. # Sample Logstash configuration for creating a simple
  8. # Beats -> Logstash -> Elasticsearch pipeline.
  9. input {
  10. beats {
  11. port => 5044
  12. }
  13. }
  14. grok {
  15. match => {
  16. "message" => "\[%{DATA:app}\] \[%{DATA:timestamp}\] \[%{DATA:thread}\] \[%{LOGLEVEL:level}\] \[%{DATA:class}\] (?<msg>(.|\r|\n)*)"
  17. }
  18. }
  19. date {
  20. match => [ "createtime", "yyyy-MM-dd HH:mm:ss"]
  21. target => "@timestamp"
  22. }
  23. mutate{
  24. remove_field => [ "beat.name"]
  25. }
  26. }
  27. output {
  28. elasticsearch {
  29. hosts => [ "http://192.168.0.137:9200"]
  30. index => "log-%{+YYYY.MM.dd}"
  31. document_type => "log"
  32. #host => "%{[@host][beat]}"
  33. #user => "elastic"
  34. #password => "changeme"
  35. }
  36. }
  37. # ==================结束===================

以上配置是监听本地5044端口,经过filter过滤器,输出到指定的output。

启动logstash


  
  1. cd /home/elkb/logstash -7.6 .2/
  2. nohup bin/logstash -f config/logstash- log.conf --config.reload.automatic &

配置filebeat

修改配置文件


  
  1. # 复制基础配置文件
  2. cd /home/elkb/filebeat-7.6.2-linux-x86_64
  3. cp filebeat.yml filebeat-log.yml
  4. vi filebeat-log.yml
  5. #=========================== Filebeat inputs =============================
  6. # 开启配置 一定要记得开 一定要记得开
  7. enabled: true
  8. # 设置读取文件路径
  9. paths:
  10. - /home/ad/logs/*/all.log
  11. #开启排除文件
  12. exclude_files: [ '.gz$']
  13. # 添加额外的自定义字段
  14. fields
  15. host: 192.168.0.137
  16. # 配置 Multiline 匹配多行消息
  17. multiline.pattern: ^\[
  18. multiline.negate: true
  19. multiline.match: after
  20. #============================= Logstash output ===============================
  21. #输出设置
  22. output.logstash:
  23. # The Logstash hosts
  24. hosts: [ "192.168.0.137:5044"]
  25. #=========================== 调优 =============================
  26. ## 调优 避免 占用内存过大
  27. ## 是否因为通配符的原因,造成同时监控数量巨大的文件
  28. ## 是否文件的单行内容巨大,日志记录不规范
  29. ## 是否output经常阻塞,event queue里面总是一直缓存event
  30. max_procs: 1
  31. queue.mem.events: 256
  32. queue.mem.flush.min_events: 128

可以配置多个input。

启动filebeat


  
  1. # 文件必须需要属于root
  2. chown -R root /home/elkb/filebeat-7.6.2-linux-x86_64
  3. # 查看启用或者禁用的模块列表
  4. ./filebeat modules list
  5. # 启用logstash模块
  6. ./filebeat modules enable logstash
  7. # 检查配置文件是否正确
  8. ./filebeat test config
  9. ## 启动 filebeat
  10. cd /home/elkb/filebeat-7.6.2-linux-x86_64/
  11. nohup ./filebeat -e -c filebeat-log.yml &
  12. # 如果是调试
  13. nohup ./filebeat -e -c filebeat-log.yml -d "*" &

测试

filbebeat监听的是/home/ad/logs/*/all.log,所以对该文件进行修改,模拟实时日志。

  • 按照logstash中grok的格式进行修改该文件
[consumer-log] [2020-04-30 18:47:42,710] [org.springframework.kafka.KafkaListenerEndpointContainer#4-0-C-1] [INFO] [com.consumer.log.consumer.LogKafkaConsumer.listenerCommonLog(LogKafkaConsumer.java:272)] 公共日志处理开始:1588243662710
  • 查看es是否同步创建索引,

  
  1. # 获取指定日期 index log-YYYY.MM.dd
  2. curl http: //192.168.0.137:9200/log-2020.05.01?pretty

 

  • kibana配置好index Patterns之后,能否查看到对应的信息

  
  1. 在kibana中的management->kibana-> Index Patterns中选择create index patterns,根据提示创建新的面板信息。
  2. 创好之后,在discovery上查看对应的索引信息。

 

搭建过程中需要注意的问题

  • elasticsearc相关文件不能属于root
  • filebeat只能用root进行启动
  • logstash的filter中的grok一定要配置正确,否则会出现connection reset by peer,即filbeat传给logstash之后无法同步到es,grok语法传送门

转载:https://blog.csdn.net/Daijianshi_123/article/details/105888614
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场