前言
最近看了看 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 | #https://www.elastic.co/downloads/beats/filebeat |
修改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 | #=========================== Filebeat inputs ============================= |
启动并且根据配置自动安装filebeat 索引
1 | # 启动并且安装 filebeat |
这个时候 在这台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集群接入