在CentOS上集成filebeat+ELK docker收集日志

架构:

  1. Dcker 安装
    1. docker 需要Linux Kernels 不低于 3.10 并且是 64-bit 机器。

    2. 更新yum(centos低版本更新,高版本可以不用更新),避免安装失败。

      更新完成

    3. 使用yum安装docker

      安装完成

    4. 检查是否安装成功

      Docker启动成功

     

    5.设置开机启动

                       

  1. 查看docker的版本号

  2. 查看系统(docker)层面信息,包括管理的images, containers数等。

  1. 下载docker镜像
    1. 拉取elk集成镜像,不加版本号默认下载最新版本

    2. vm.max_map_count至少需要262144。

      新增vm.max_map_count=262144

      执行命令:sysctl -p 查看

    3. 查看本地docker 镜像

    4. 创建容器,elk为容器名称,唯一,容器名称不能冲突。sebp/elk为镜像名称

      docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

    5. 查看所有容器

    6. 运行容器,docker start 容器名称/容器ID

    7. 查看运行中的容器

    8. 访问5601端口,出现下面界面表示kibana启动成功

    9. 访问9200端口,如下图,则表示elasticsearch启动成功

    10. 模拟一条日志。

      进入elk docker容器内部

      输入:/opt/logstash/bin/logstash --path.data /tmp/logstash/data \

            -e'input { stdin { } } output { elasticsearch { hosts => ["localhost"] } }'

       

      注意:如果看到这样的报错信息 Logstash could not be started because there is already another instance using the configured data directory.  If you wish to run multiple instances, you must change the "path.data" setting. 请执行命令:service logstash stop 然后再执行就上面命令就可以了。

    

 输入一条信息

      

  1. 刷新5601端口,创建logstash-*拦截

  2. 在Discover中可以看到输入的信息

    最后按Ctrl+C停止logstash运行。

   

    Elk dokcer安装到此结束。

  1. Filebeat安装
    1. 下载filebeat,地址:

      https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-linux-x86_64.tar.gz

    2. 解压

      解压完成后查看

    3. 重命名文件夹

    4. 修改filebeat.yml配置参数

      yml.log是我自己的模拟的日志记录,只读取一个log文件。假如想读取某目录下所有的log文件则这样配置:

      paths:

  • /var/log/*.log,表示读取该目录下所有的log文件。

    注意:目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:/var/log/* /*.log,则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。

                             

   注释掉elasticsearch,打开logstash,localhost:docker在本机运行,且在前面已设置docker的5044端口对应本机的5044端口。假如elk docker在另外的IP上运行,则填写那台的IP地址,最好不要直接写IP。可在hosts文件进行IP映射。

  1. 这里有个特别值得注意的地方。

    先进入已运行的elk docker

    进入/etc/logstash/conf.d目录下,有四个配置文件

    02-beats-input.conf:对5044端口进行证书验证规则,前面filebeat.yml没有配置证书,所以这里删除ssl验证规则。

    10-syslog.conf:对信息带syslog字符的日志进行了过滤。

    11-nginx.conf: 对信息带nginx-access字符的日志进行了过滤。

    这两个配置文件即表示logstash收集带syslog字符输出某种日志格式,满足nginx-access字符信息的日志另一种输出日志格式。

  2. 测试

    退到centos系统,进入/opt/filebeat/目录下

    记得先开放5044端口才运行:./filebeat -e -c filebeat.yml -d "Publish"

    浏览器打开5601端口,记得新创建filebeat-*索引,而不是上面logstash索引。

    最后Filebeat启动:

    nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &filebeat会转入后台运行

  1. Filebeat+Logstash自定义日志字段

Logstash配置

进入docker容器,删除原来的logstash配置文件

新建自己的配置文件

filter:对发送过来的每一条信息进行拦截。

grok:匹配日志规则。

mutate:remove_field移除日志中不需要的字段

patterns_dir: 正则表达式存放文件夹路径

%{ MYTIME:create_time}:MYTIME在Patterns_dir文件夹下匹配的正则表达式,create_time:在kibana上显示为create_time

(?<cause_by>(.*|\n\s+.*|\n\s+|\n.*)+):在这配置文件上自定义的字段,(.*|\n\s+.*|\n\s+|\n.*)+匹配的正则表达式,cause_by:匹配的日志在kibana显示为cause_by字段。

input {

beats {

port => 5044

}

}

 

filter {

 

grok {

match => {

patterns_dir => ["/opt/logstash/patterns"]

"message" => "%{MYPID:pid}\s+%{MYTIME:create_time}\s+%{MYCLASS:class}\s+%{MYLEVEL:level}\s+(?<cause_by>(.*|\n\s+.*|\n\s+|\n.*)+)"

}

 

match => {

patterns_dir => ["/opt/logstash/patterns"]

"message" => "%{MYTIME:create_time}\s+%{MYCLASS:class}\s+%{MYLEVEL:level}\s+(?<cause_by>(.*|\n\s+.*|\n\s+|\n.*)+)"

}

}

 

mutate {

remove_field => ["tags", "beat"]

remove_field => ["tags", "host"]

remove_field => ["tags", "offset"]

remove_field => ["tags", "message"]

remove_field => ["tags", "@version"]

}

 

}

 

output {

elasticsearch {

hosts => ["localhost"]

}

}

去定义我们自己的grok规则:

上面patterns_dir的路径/opt/logstash/patterns/(可自定义路径)

MYPID:匹配588681026位置

MYTIME: 匹配2017-Oct-24 12:00:00.020位置

MYCLASS:匹配[schedulerFactoryBean_Worker-1]位置

MYLEVEL: 匹配ERROR位置

最后,退出容器,重启容器。

FileBeat配置

#=========================== Filebeat prospectors =============================

 

filebeat.prospectors:

- input_type: log

#日志路径

paths:

- /var/log/admin-error.log

#可用来区分不同的项目日志,在logstash对应type

document_type: huntingdog-admin

#排除包含DEBUG字段信息的日志

exclude_lines: ["DEBUG"]

#包含输入中符合正则表达式列表的那些行(默认包含所有行),include_lines执行完毕之后会执行exclude_lines

include_lines: ["ERR", "WARN"]

 

#匹配日志直到下一行满足作为一条日志(前面,后面由下面match字段决定)

multiline.pattern: ^\d+\s+[\d]{4}\-[A-Za-z]+\-[\d]{2}\s+[\d]{2}:[\d]{2}:[\d]{2}.[\d]+\s+\[

#是否转换

multiline.negate: true

#pattern匹配后面的日志作为一条日志(before匹配前面的为一条日志)

multiline.match: after

# 如果一个文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h

#close_older: 1h

# 这个得意思就是会在es中多添加一个字段,格式为 "filelds":{"level":"debug"}

#fields:

# level: debug

# review: 1

# 如果设置为0s,则Filebeat会尽可能快地感知更新(占用的CPU会变高)。默认是10s

#scan_frequency: 10s

# Filebeat检测到某个文件到了EOF(文件结尾)之后,每次等待多久再去检测文件是否有更新,默认为1s

backoff: 10s

- input_type: log

paths:

- /var/log/ygzj.log

document_type: ygzj

exclude_lines: ["DEBUG"]

include_lines: ["ERR", "WARN"]

 

multiline.pattern: ^[\d]{4}\-[A-Za-z]+\-[\d]{2}\s+[\d]{2}:[\d]{2}:[\d]{2}.[\d]+\s+\[

multiline.negate: true

multiline.match: after

backoff: 10s

#-------------------------- Elasticsearch output ------------------------------

#output.elasticsearch:

#hosts: ["192.168.0.187:9200"]

#protocol: "https"

#username: "elastic"

#password: "changeme"

#----------------------------- Logstash output --------------------------------

output.logstash:

hosts: ["localhost:5044"]

#ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-beats.crt"]

#ssl.certificate: "/etc/pki/tls/certs/logstash-beats.crt"

#ssl.key: "/etc/pki/tls/private/logstash-beats.key"

#================================ Logging =====================================

#logging.level: debug

# "publish", "service".

#logging.selectors: ["*"]

最后,kibana拦截的方式需修改成:logstash-*

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值