搭建一个 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.gz
tar -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.103
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 集群名称,默认是elasticsearch
 ###保证三台服务器节点集群名称相同
cluster.name: my-application
#-----------------------Node-----------------------
# 节点名称,默认从elasticsearch-6.3.1/lib/elasticsearch-6.3.1.jar!config/names.txt中随机选择一个名称

 ###每个节点名称不一样,其他两台为node-1022,node-1033
node.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: false
bootstrap.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列表进行节点发现,组建集群
# 默认节点列表:
###多个服务集群ip
discovery.zen.ping.unicast.hosts: ["192.168.9.101", "192.168.9.102","192.168.9.103"]
# 通过配置这个参数来防止集群脑裂现象 (集群总节点数量/2)+1

discovery.zen.minimum_master_nodes: 1

# 其他几台服务器只需修改node.name和network.host属性
# 分别启动每台服务器上的ES
# 在地址栏输入http://192.168.9.102:9200/_cat/nodes?pretty验证群集是否启动,带“*”证明是master节点,否则是slave节点
### 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.conf
vi /etc/security/limits.d/20-nproc.conf
#修改为
* soft nproc 4096

vi /etc/sysctl.conf 

# 添加下面配置:
vm.max_map_count=655360

sysctl -p

# 然后,重新启动Linux,必须重启!!!
shutdown -r now
  1. 启动 ElasticSearch
//ElasticSearch 不能以 root 启动所以我们要新建一个用户
adduser elk
 # 将es的拥有者和group改为elk
chown -R elk:elk /opt/module/elasticsearch-6.3.1/
su elk

bin/elasticsearch
  1. 验证 ElasticSearch
curl http://192.168.9.102:9200

在这里插入图片描述

Kibana 安装

  1. 下载Kibana ,国内慢 找镜像站下载
wget -c https://gitee.com/mirrors/kibana/repository/archive/v6.3.1
tar -zxvf kibana-6.3.1.tar.gz -C /opt/module/

  1. 修改 修改相关配置,kibana.yml
vi config/kibana.yml

# Kibana 端口
server.port: 5601
# Kibana ip
server.host: "192.168.9.102"
# elasticsearch  地址
elasticsearch.url: "http://192.168.9.102:9200"
  1. 启动Kibana
bin/kibana
  1. 验证是否启动成功
浏览器 http://59.110.167.61:5601/

在这里插入图片描述

Logstash 安装

  1. 下载Logstash ,国内慢 找镜像站下载
wget -c https://mirrors.huaweicloud.com/logstash/6.3.1/logstash-6.3.1.tar.gz
tar -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.1
mkdir job
vi 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.gz
tar -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里面总是一直缓存event
max_procs: 1
queue.mem.events: 256
queue.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 最佳实践

posted @ 2020-05-22 15:07  aaaak  阅读(555)  评论(0编辑  收藏  举报