2020年5月22日星期五

搭建一个 ELKB 日志收集系统

搭建一个 ELKB 日志收集系统


开发环境
centos-release-7-3.1611.el7.centos.x86_64
elasticsearch-6.3.1
kibana-6.3.1
logstash-6.3.1
filebeat-6.3.1

ElasticSearch安装

  1. 下载ElasticSearch ,国内慢 找镜像站下载
wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gztar -zxvf elasticsearch-6.3.1.tar.gz -C /opt/module/mkdir data
  1. 修改配置文件/opt/module/elasticsearch-6.3.1/config/elasticsearch.yml
### node-1 192.168.9.101 ### node-2 192.168.9.102### node-3 192.168.9.103http.port: 9200http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: true# 集群名称,默认是elasticsearch ###保证三台服务器节点集群名称相同cluster.name: my-application#-----------------------Node-----------------------# 节点名称,默认从elasticsearch-6.3.1/lib/elasticsearch-6.3.1.jar!config/names.txt中随机选择一个名称 ###每个节点名称不一样,其他两台为node-1022,node-1033node.name: node-101#-----------------------Paths-----------------------# 可以指定es的数据存储目录,默认存储在es_home/data目录下path.data: /opt/module/elasticsearch-6.3.1/data# 可以指定es的日志存储目录,默认存储在es_home/logs目录下path.logs: /opt/module/elasticsearch-6.3.1/logs#-----------------------Memory-----------------------# 锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区bootstrap.memory_lock: falsebootstrap.system_call_filter: false#-----------------------Network-----------------------# 为es设置ip绑定,默认是127.0.0.1,也就是默认只能通过127.0.0.1 或者localhost才能访问###实际服务器的ip地址network.host: 192.168.9.101 #-----------------------Discovery-----------------------# 当启动新节点时,通过这个ip列表进行节点发现,组建集群# 默认节点列表:###多个服务集群ipdiscovery.zen.ping.unicast.hosts: ["192.168.9.101", "192.168.9.102","192.168.9.103"]# 通过配置这个参数来防止集群脑裂现象 (集群总节点数量/2)+1discovery.zen.minimum_master_nodes: 1# 其他几台服务器只需修改node.name和network.host属性# 分别启动每台服务器上的ES# 在地址栏输 es 容灾原理###(1)ES会自动选举新的master;###(2)ES在群集中会有多副本,异地备份能力;###(3)故障恢复,数据恢复能力
  1. 配置本机环境
# soft nproc :单个用户可用的最大进程数量(超过会警告);# hard nproc:单个用户可用的最大进程数量(超过会报错);# soft nofile :可打开的文件描述符的最大数(超过会警告);# hard nofile :可打开的文件描述符的最大数(超过会报错);vi /etc/security/limits.conf# 添加* soft nofile 65536* hard nofile 131072* soft nproc 2048* hard nproc 4096# centos 7 为 20-nproc.conf centos 6 为 90-nproc.confvi /etc/security/limits.d/20-nproc.conf#修改为* soft nproc 4096vi /etc/sysctl.conf # 添加下面配置:vm.max_map_count=655360sysctl -p# 然后,重新启动Linux,必须重启!!!shutdown -r now
  1. 启动 ElasticSearch
//ElasticSearch 不能以 root 启动所以我们要新建一个用户adduser elk # 将es的拥有者和group改为elkchown -R elk:elk /opt/module/elasticsearch-6.3.1/su elkbin/elasticsearch
  1. 验证 ElasticSearch
curl src="https://img-blog.csdnimg.cn/20200427233652650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTAwMjA3MjY=,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述">

Kibana 安装

  1. 下载Kibana ,国内慢 找镜像站下载
wget -c https://gitee.com/mirrors/kibana/repository/archive/v6.3.1tar -zxvf kibana-6.3.1.tar.gz -C /opt/module/
  1. 修改 修改相关配置,kibana.yml
vi config/kibana.yml# Kibana 端口server.port: 5601# Kibana ipserver.host: "192.168.9.102"# elasticsearch 地址elasticsearch.url: " start="3">
  • 启动Kibana
  • bin/kibana
    1. 验证是否启动成功
    浏览器 src="https://img-blog.csdnimg.cn/20200427234652561.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTAwMjA3MjY=,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述">

    Logstash 安装

    1. 下载Logstash ,国内慢 找镜像站下载
    wget -c https://mirrors.huaweicloud.com/logstash/6.3.1/logstash-6.3.1.tar.gztar -zxvf logstash-6.3.1.tar.gz -C /opt/module/
    1. 验证 Logstash 是否安装成功
    bin/logstash -e 'input { stdin { } } output { stdout {} }'# 输入 hellow 等待返回{  "message" => "hellow",  "@version" => "1",   "host" => "iZ2zei02d9n5g3r7vch43bZ", "@timestamp" => 2020-04-27T16:01:53.951Z}# 则安装成功
    1. Logstash 语法
      区段 input {},filter {},output {}
      在这里插入图片描述
      示例 官网插件例子地址
    # /opt/module/logstash-6.3.1mkdir jobvi job/test.conf# 输入input { stdin { }}output { stdout {codec=>"rubydebug"}}# 保存执行bin/logstash -f job/test.conf --verbose --debug

    logstash 日志收集
    在这里插入图片描述

    Filebeat 安装

    wget -c https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.1-linux-x86_64.tar.gztar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz -C /opt/module
    1. 配置 filebeat.yml
    vi filebeat.yml#=========================== Filebeat inputs =============================## 配置 多 type 多目录日志收集## 配置 Multiline 匹配多行消息## 配置 fields 向输出的每一条日志添加额外的信息filebeat.inputs:- type: log enabled: true paths: - /home/tomcat/apache-tomcat-1/logs/* tags: ["java-1"] fields: logIndex: tomcat docType: tomcat-log level: debug fields_under_root: true multiline: pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' negate: true match: after - input_type: log paths: - /home/tomcat/apache-tomcat-2/logs/* tags: ["java-2"] fields: logIndex: tomcat docType: tomcat-log level: error fields_under_root: true multiline: pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' negate: true match: after#============================= Filebeat modules ===============================#============================= Logstash output ===============================# 输出设置output.logstash: # logstsh的ip地址 hosts: ["192.168.9.101:5044"] loadbalance: true index: filebeat ## 调优 避免 占用内存过大## 是否因为通配符的原因,造成同时监控数量巨大的文件## 是否文件的单行内容巨大,日志记录不规范## 是否output经常阻塞,event queue里面总是一直缓存eventmax_procs: 1queue.mem.events: 256queue.mem.flush.min_events: 128
    1. 启动 filebeat
    ## 文件要属于root 用户才能运行chown -R root /opt/module/filebeat-6.2.1-linux-x86_64## 查看启用或者禁用的模块列表./filebeat modules list## 启用模块./filebeat modules enable logstash## 检查配置是否正确./filebeat -configtest## 启动 filebeat./filebeat -e -c filebeat.yml
    1. 配置 logstash 的 filebeat.conf
    input { # 接收filebeat读取的数据 beats { port => 5044 }}# 日志例子 #100.116.237.39 - - [17/Jul/2019:11:13:28 +0800] "HEAD /xinyuyl-admin/index.html HTTP/1.0" 200 -## 不懂的可以去看看 [grok入门](https://www.jianshu.com/p/443f1ea7b640)filter { grok {  match => {   "message" => "%{IPV4:ip_address} - - \[%{HTTPDATE:timestamp}\] %{QS:referrer} %{NUMBER:status} -"  } } date {  match => [ "timestamp","dd/MMM/yyyy:hh:mm:ss Z"]  target => "@timastamp"  timezone => "Asia/Shanghai" } mutate {  remove_field => ["message","host","@timestamp","@version"]  convert => {    "referrer" => "string"  }  split => ["referrer", " "]   add_field => {   "path" => "%{[referrer][1]}"   "Protocol" => "%{[referrer][2]}"   } }}output { # 输出到es elasticsearch { hosts => ["172.17.53.25:9200"] index => "system-log-java-%{+YYYY.MM.dd}" document_type => "log" manage_template => false }}
    1. 测试 logstash 的 filter 是否能成功解析
    # 验证 filebeat.conf 是否正确./bin/logstash -f job/filebeat.conf -t#调试启动./bin/logstash -f job/filebeat.conf --verbose --debug

    显示 json 即为成功
    在这里插入图片描述

    总结

    1. 启动 ElasticSearch
      ./elasticsearch-6.3.1/bin/elasticsearch -d
    2. 启动 Kibana
      nohup ./kibana-6.3.1-linux-x86_64/bin/kibana >/dev/null 2>&1 &
    3. 启动 Logstash
      nohup ./logstash-6.3.1/bin/logstash -f job/filebeat.conf >/dev/null 2>&1 &
    4. 启动 Filebeat
      nohup ./filebeat-6.3.1-linux-x86_64/filebeat -e -c filebeat.yml >/dev/null 2>&1 &

    下一章 出高可用elk 实例
    在这里插入图片描述

    参考:
    Logstash 最佳实践


    没有评论:

    发表评论