0%

es+kibana+filebeat采集docker日志实战

前言

最近看了看 docker 标准输出和标准错误的日志采集
发现 filebeat 可以直接监听 docker的启动结束等动作 并且几乎不需要配置什么 就可以很轻松的采集到node上的docker运行的日志
而且也可以直接接入 k8s的标准输出和错误日志 贯彻了 elastic 的简单粗暴的套路

实战

启动 elastic-search 和kibana

这里直接使用docker 启动即可 如果是生产或者预发环境 建议使用官方的镜像作基础镜像在上面进行个性化优化

1
sudo docker run -d -p 9200:9200 -p 5601:5601 --name es-kibana-test  nshou/elasticsearch-kibana
安装filebeat

这里使用下载压缩包方式安装 因为改配置简单 如果需要使用docker方式启动 改配置不是很方便 需要进行调整 这里只是作演示 就直接选择压缩包方式使用

1
2
3
#https://www.elastic.co/downloads/beats/filebeat
weget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.1-linux-x86_64.tar.gz
sudo zxvf ./filebeat-6.3.1-linux-x86_64.tar.gz
修改filebeat配置

先备份 默认的filebeat.yml

1
sudo cp ./filebeat.yml filebeat.yml.bak

修改安装目录中filebeat.yml 主要是修改 inputs的type 自动安装kibana的索引 和es地址
具体配置详情参考:https://www.elastic.co/docker-kubernetes-container-monitoring

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#=========================== Filebeat inputs =============================

filebeat.inputs:
- type: docker
containers.ids:
- '*'
processors:
- add_docker_metadata: ~


#============================== Kibana =====================================

setup.kibana:
host: "localhost:5601"


#================================ Outputs =====================================

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]

启动并且根据配置自动安装filebeat 索引
1
2
# 启动并且安装 filebeat 
sudo ./filebeat --setup -e

这个时候 在这台node上 所有docker的日志都会被filebeat采集起来并且发送到es上

产出日志后 直接在kibana上查看即可

遇到的问题

  • kibana 建立读取索引的时候 报错 FORBIDDEN/12/index read-only / allow delete (api)]
    删除 索引的 只读权限即可
    1
    curl -XPUT -H "Content-Type: application/json" http://ip:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

总结

由于 docker集群的日志采集比较操蛋 可能是多种不同的系统运行(例如java类应用、各种服务软件的日志之类的) 那么在日志格式上无法做到 统一
采用这种通过收集docker 的标准输出和错误输出 可以收集整个docker集群中的docker的日志 方便查看和管理

当然filebeat也支持直接和k8s集群接入