docker部署elk日志中间件+filebeat采集

1,首先确认机器上有4G可用内存

#然后输入命令查看机器上面mmap的值:

sysctl vm.max_map_count

#如果值小于655360

#执行命令:

sysctl -w vm.max_map_count=655360

#然后设置修改文件

vim /etc/sysctl.conf

#加入:
vm.max_map_count=655360

启动elk:
 

sudo docker run -d -p 5601:5601 -p 9200:9200 -p 5044:5044 -v elk-data:/var/lib/elasticsearch --name elk sebp/elk:550
sudo docker logs -f elk

在演示环境和测试环境中,ssl是不必要的,可以去掉logstash的ssl:

docker exec -it elk bash
vim /etc/logstash/conf.d/02-beats-input.conf
#删除里面所有ssl与ssl-prefixed指令,改成如下:
input {
  beats {
    port => 5044
  }
}

安装filebeat:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.3-x86_64.rpm
sudo rpm -vi filebeat-5.5.3-x86_64.rpm

配置日志路径和输出地址

vim /etc/filebeat/filebeat.yml
#注释output.elasticsearch及下面子节点
#然后添加如下后修改:

output:
  logstash:
    enabled: true
    hosts:
      - 你elk服务器IP:5044
    #如果logstash启用了ssl,那么这块需要配置
    #ssl:
    #  certificate_authorities:
    #    - /etc/pki/tls/certs/logstash-beats.crt
    timeout: 15

filebeat:
  prospectors:
    - input_type: log
      paths:
       #我的JAVA系统日志
        - /var/log/bizlog/*
      document_type: biz_log
      #添加自定义字段
      fields:
        log_type: biz_log
      #运行创建根属性
      fields_under_root: true
    - input_type: log
      paths:
        - "/var/log/nginx/*.log"
      document_type: nginx-access

其中logstash-beat.crt去https://github.com/spujadas/elk-docker下载,也可以用自己的证书。

然后启动filebeat:

sudo /etc/init.d/filebeat start
tail -f /var/log/filebeat/filebeat

去服务器IP://5601看抓取的日志了

 

增加java异常日志(多行)处理,在filebeat端配置和logstash端配置中选其一,不过建议在filebeat配置

filebeat配置:

filebeat.prospectors:
- input_type: log
    paths:
     #我的JAVA系统日志
      - /var/log/bizlog/*
    document_type: biz_log
    #添加自定义字段
    fields:
      log_type: biz_log
    #运行创建根属性
    fields_under_root: true
    #表示以2开头为一行(比如2018,2019)
    multiline.pattern: ^2
    #为true表示满足pattern的算一行,false反之
    multiline.negate: true
    #表示不满足新行的mesasge添加到末尾
    multiline.match: after
    #合并超时时间
    multiline.timeout: 5s

logstash配置(如果filebeat配置了这里就不用配了):

docker exec -it elk bash
vim /etc/logstash/conf.d/02-beats-input.conf
#改成如下这样(表示开头第一个是2的才能算一行,我这日志是2018日期开头)
input {
  beats {
    port => 5044
    codec => multiline {
        pattern => "^2"
        negate => true
        what => previous
    }
  }
}
#退出重启容器
docker restart elk
docker logs -f elk

如果需要NGINX代理kibana,需要先配置basePath

docker exec -it elk bash
vim /opt/kibana/config/kibana.yml
#修改basePath
server.basePath: "/kibana"
server.host: "0.0.0.0"


#然后重启容器
docker restart elk

然后配置nginx

location /kibana/ {
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';
  proxy_set_header Host $host;
  proxy_cache_bypass $http_upgrade;

  proxy_pass  https://192.168.223.67:5601/;
  rewrite ^/kibana/(.*)$ /$1 break;
}

 

如果遇到kibana启动不了,那把映射的卷目录权限设置成777,并修改容器里kibana配置

vim etc/init.d/kibana
修改:
NODE_OPTIONS="--max-old-space-size=8000"

取日志里时间,因为es里只存UTC时区,这里要表明日志所在的时区,我的是Asia/Shanghai(东八区)

vim /etc/logstash/conf.d/11-nginx.conf
添加
if [log_type] == "biz_log" {
    grok {
      match => { 
        "message" => "(?\S{10} \S{12}) %{GREEDYDATA:msg}"
      }
    }
    date {
      match => ["fullTime", "yyyy-MM-dd HH:mm:ss.SSS" ]
      timezone =>"Asia/Shanghai"
    }
}

 

 

你可能感兴趣的:(docker部署elk日志中间件+filebeat采集)