ELK系列文章:

  1. Elastic Stack(ELK)日志系统简介及搭建
  2. Elastic Stack(ELK)日志系统后续使用及问题解决
  3. kibana7.2添加登录及权限
  4. kibana监控logstash

一、需求:
在我们的项目中有日志是一个必不可少的东西,但是日志的检索是一个很麻烦的事情,如每天一个日志,要找到问题就得一个一个找,并不能做到检索功能,这还算好的,如果是分布式的,每个机器都得找一遍,这种效率太低,当然可以把日志收集到一个文件中,多个机器每天的日志可以收集到一块,如果把所有的日志收集一块显然不现实;所以出现了很多的日志检索方式,这篇介绍的是Elastic Stack(ELK)。

二、简介:
1、ELK Stack:ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana ,它们都是开源软件,ELK是5.0版本前的统称;这是一套统一的日志收集分析系统。

2、Elastic Stack:是ELK5.0之后加入了Beats 套件后的新称呼。

3、fielbeat是一个轻量级日志收集工具,类似于Linux系统中tail -f监控文件变化的功能;其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比 Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。

4、Logstash是一款开源的日志收集处理框架,负责数据的采集和格式化;Logstash处理数据主要分为三个阶段,inputs、filters、outputs,其中各个阶段,官方提供了丰富的插件,可以对数据进行处理。

5、Elasticsearch是一个开源的分布式搜索引擎,用于数据的快速索引存储。

6、Kibana负责提供web展示功能;可以帮助汇总、分析和搜索重要数据日志。

7、Beats包含六种工具:

                 Packetbeat: 网络数据(收集网络流量数据)
                 Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
                 Filebeat: 日志文件(收集文件数据)
                 Winlogbeat: windows事件日志(收集 Windows 事件日志数据)
                 Auditbeat:审计数据 (收集审计日志)
                 Heartbeat:运行时间监控 (收集系统运行时的数据)

三、采集流程:
beat采集–>Elasticsearch–>Kibana
           beat采集–>Logstash–>Elasticsearch–>Kibana

  1. filebeat从不同服务端收集日志转发给logstash处理。
  2. logstash将filebeat收集的日志进行格式化处理。
  3. 然后通过elasticsearch对格式化后的数据进行索引和存储,最后交由kibana展示。
  4. 将日志进行集中化管理(filebeat)
  5. 将日志格式化(logstash)
  6. 对格式化后的数据进行索引和存储(elasticsearch)
  7. 前端数据的展示(kibana/grafana)

ck 日志系统 日志系统 elk_ck 日志系统


四、准备工作及官网:

  1. ELK官网:https://www.elastic.co/cn/products/
  2. ELK下载地址:https://www.elastic.co/cn/products/log-monitoring
  3. ELK中文指南:https://legacy.gitbook.com/book/chenryn/elk-stack-guide-cn/details
  4. 中文社区:https://elasticsearch.cn/
  5. 官方安装文档:https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html

    ELK要求必须java1.8以上环境,所以先具备java1.8环境;4个服务最好使用相同版本;官网最新为7.2.0,下载Linux包;本人准备把Logstash、Elasticsearch、Kibana、放在一台机器;FileBeat放在服务所在机器。

五、安装Elasticsearch:
 1、新建好elk用户,然后解压Elasticsearch的压缩包tar -vxf elasticsearch-7.2.0.tar.gz   
  2、配置,打开/config/elasticsearch.yml#ip
 network.host: ***.***.*.**
 #端口
 http.port: 9200
 #主要用于集群配置,可以先放开,不打开会报错,后边具体说;ES名称,多台服务器配置名称不可相同
 node.name: node-1
 cluster.initial_master_nodes: ["node-1"]
             3、启动,进入到/bin/   ./elasticsearch -d或者./elasticsearch & 4、访问http://ip:9200,有数据则成功
            5、报错:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
 #修改下面的文件  里面是一些内核参数
 vi /etc/sysctl.conf 
  
 #添加以下配置  
 vm.max_map_count=655360
 保存然后sysctl -p
 #-p   从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
  
 bootstrap checks failed max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
 vi /etc/security/limits.conf
 #添加如下信息
  
 * soft nofile 65536
 * hard nofile 131072
 * soft nproc 2048
 * hard nproc 4096
 max number of threads [1024] for user [es] likely too low, increase to at least [2048]
 vi /etc/security/limits.d/90-nproc.conf
 #添加如下信息
  
 * soft nproc 2048
 system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
 elasticsearch.yml文件
  
  
 bootstrap.memory_lock: false
 bootstrap.system_call_filter: false
 the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
 elasticsearch.yml文件
  
 node.name: node-1 前面的#打开
  
 cluster.initial_master_nodes: ["node-1"] 
  
 六、安装kibana:
 1、解压包tar -vxf kibana-7.2.0.tar.gz   
 2、进入/config,修改kibana.yml#端口
 server.port: 5601
  
 #ip
 server.host: "198.218.*.**"
  
 #elasticsearch的服务,可以配置多个
 elasticsearch.hosts: ["http://198.218.6.12:9200"]
  
 #日志输出
 logging.dest: /home/elk/kibana/kibanalog/kibana.log


3、启动,进入到/bin目录,./kibana &

4、访问http://ip:5601,如果连接elasticsearch出错,会在页面报连接elasticsearch集群无法连接

5、设置kibana;Managementc菜单,进入Advanced Settings目录,修改Date format更改时间显示格式为yyyy-MM-dd HH:mm:ss:SSS,避免数据导入后显示的时间字段数据和ES存储数据不相同;进入Monitoring菜单添加监控服务,监控运行健康状态。

七、安装logstash:
1、解压包

tar –xvf logstash-7.2.0.tar.gz
 2、配置;进入/config,修改logstash.yml#ip
 http.host: "198.218.*.*"
  
 #端口,默认9600
 http.port: 9600-9700
 修改logstash-sample.conf input {
   #监测beats通过5044传输的数据
   beats {
     port => 5044
   }
 }
  
 output {
   elasticsearch {
  
     #es的服务
     hosts => ["http://198.218.*.*:9200"]
  
     #主键
     index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
     #user => "elastic"
     #password => "changeme"
   }
 }


3、启动,进入/bin,./logstash -f /home/elk/logstash/logstash-7.2.0/config/logstash-sample.conf &

日志输出到logs目录的logstash-plain.log文件

4、访问,http://ip:9600;出现数据则成功

八、安装filebeat:
1、解压包

tar -vxf filebeat-7.2.0.tar.gz
2、配置;进入/config,修改filebeat.yml

filebeat.inputs:
 
#输入格式为log
- type: log
 
#此处一定设置true,否则日志采集不生效
    enabled: true
 

#日志路径
     paths:
         - /home/erp/erp-interface-logs/*.log
  
 #输出到logstash
 output.logstash:
     hosts: ["198.218.*.*:5044"]


3、启动,进入/bin, ./filebeat -c filebeat.yml &   查看是否启动成功,查看进程或者查看日志即可

九、注意及结束:
相比于向 elasticsearch 输出数据,个人更推荐向 logstash 输出数据。 因为 logstash 和 filebeat 一起工作时,如果 logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决,FileBeat 将恢复到原来的速度并继续传播。这样,可以减少管道超负荷的情况。
Filebeat 有两个主要组件:harvester:负责读取一个文件的内容。它会逐行读取文件内容,并将内容发送到输出目的地。prospector:负责管理 harvester 并找到所有需要读取的文件源。比如类型是日志,prospector 就会遍历制定路径下的所有匹配要求的文件。
对于所有服务的停止,就是直接杀进程,找不到进程可以使用fuser -n tcp 端口,如fuser -n tcp 5601,然后杀进程即可
参考文章:
安装: