使用filebeat收集kubernetes容器日志
2018-02-09 14:03
4235 查看
kubernetes官方插件使用EFK来处理容器日志, 其中F指代Fluentd(Fluentd属于CNCF项目), 用于收集容器的日志。但是由于Fluentd用起来的确不怎么舒服(Ruby风格配置文件), 而Logstash又过于重量级(光启动就需要消耗大约500M内存), 而Elatic家族的Beats系列中的Filebeat既轻量又无依赖, 因此是作为DaemonSet部署的不二之选。
从中可以看出Logstash的定位变了, 它用于日志的原始数据的分析和转换(grok), 因此在轻量级的方案中首选Beats系列, 下面是基于ELK改造过后的基于Filebeat的容器日志处理方案:
安装Elasticsearch, Kibana
安装Filebeat用于测试EFK已经能正常工作
以DaemonSet部署Filebeat
Install elaticdearch
Install kibana
安装完成后确认服务都已经对外提供服务:
对ES添加添加一些我们需要的插件
为内建用户初始化密码(elas
4000
tic, kibana, and logstash_system):
测试ES已经正常工作
测试Kibana已经正常工作: 访问http://192.168.204.14:5601/ , 注意此时Kibana应该还没有数据。
Filebeat是模块化的, 这里开启审计日志模块, 来进行测试:
稍等片刻我们就可以通过dashboard测试数据收集是否正常:
到此EFK工作正常。
下载官方manifests
架构
在进行日志收集的过程中, 我们首先想到的是使用Logstash, 因为它是ELK stack中的重要成员, 但是现在的ELK家族的产品有了新的变化:从中可以看出Logstash的定位变了, 它用于日志的原始数据的分析和转换(grok), 因此在轻量级的方案中首选Beats系列, 下面是基于ELK改造过后的基于Filebeat的容器日志处理方案:
依赖部署
在Kubernetes中以DaemonSet部署Filebeat之前, 我们需要先做如下准备:安装Elasticsearch, Kibana
安装Filebeat用于测试EFK已经能正常工作
以DaemonSet部署Filebeat
部署Elasticsearch和Kibana
在部署Filebeat之前需要先部署Elasticsearch和Kibana, 关于这2部分的部署请参考:Install elaticdearch
Install kibana
安装完成后确认服务都已经对外提供服务:
[root@es-with-kb ~]# netstat -tlnup | grep -E '(:9200 |:5601)' tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 2503/./bin/../node/ tcp6 0 0 :::9200 :::* LISTEN 2367/java
对ES添加添加一些我们需要的插件
cd /usr/share/elasticsearch # 安装插件 ES的地图需要使用GEOIP来解索IP的经纬度, 所以ES还需要安装一个GEOIP的插件 bin/elasticsearch-plugin install ingest-geoip bin/elasticsearch-plugin install x-pack systemctl restart elasticsearch
为内建用户初始化密码(elas
4000
tic, kibana, and logstash_system):
bin/x-pack/setup-passwords interactive
测试ES已经正常工作
[root@es-with-kb ~]# curl http://192.168.204.14:9200 { "name" : "7t3FhoS", "cluster_name" : "elasticsearch", "cluster_uuid" : "gwxqxfOmQWKfFg_XF8-kvg", "version" : { "number" : "6.1.3", "build_hash" : "af51318", "build_date" : "2018-01-26T18:22:55.523Z", "build_snapshot" : false, "lucene_version" : "7.1.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
测试Kibana已经正常工作: 访问http://192.168.204.14:5601/ , 注意此时Kibana应该还没有数据。
验证EFK(Filebeat)
为了验证EFK能否正常工作, 因此我在EK的机器上安装了Filebeat, Filebeat的安装请查看官方文档: Filebeat安装文档Filebeat是模块化的, 这里开启审计日志模块, 来进行测试:
filebeat modules enable auditd filebeat modules list filebeat setup -e systemctl restart filebeat
稍等片刻我们就可以通过dashboard测试数据收集是否正常:
到此EFK工作正常。
DaemonSet部署Filebeat
以DaemonSet的方式部署Filebeat方便我们处理每个Node阶段上的容器日志, Filebeat容器会将Docker容器的日志目录(/var/lib/docker/containers)挂载进去开启一个prospector来进行处理。下载官方manifests
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.1/deploy/kubernetes/filebeat-kubernetes.yaml[/code]
注意这个镜像需要翻墙下载:docker.elastic.co/beats/filebeat:6.1.3, 因此提前下载好(百度网盘), 推送到自己的私有仓库, 然后修改image地址# 修改image地址 image: 192.168.204.15/kubernetes/filebeat:6.1.3 # 设置ES相关配置(注意修改成你刚才初始化的密码) - name: ELASTICSEARCH_HOST value: 192.168.204.14 - name: ELASTICSEARCH_USERNAME value: "elastic" - name: ELASTICSEARCH_PASSWORD value: "changme" # 修改configMap中ES Host的默认值 output.elasticsearch: hosts: ['${ELASTICSEARCH_HOST:192.168.204.14}:${ELASTICSEARCH_PORT:9200}']
然后开始创建:[root@k8s-apiserver01 filebeat]# kubectl create -f filebeat-kubernetes.yaml configmap "filebeat-config" created configmap "filebeat-prospectors" created daemonset "filebeat" created clusterrolebinding "filebeat" created clusterrole "filebeat" created serviceaccount "filebeat" created
检查filebeat是否run起来[root@k8s-apiserver01 filebeat]# kubectl --namespace=kube-system get ds/filebeat NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE filebeat 4 4 0 4 0 <none> 1m [root@k8s-apiserver01 ~]# kubectl get pods -n kube-system | grep filebeat filebeat-sltwm 1/1 Running 0 25m filebeat-tqgjx 1/1 Running 0 25m filebeat-vq4wj 1/1 Running 0 25m filebeat-wq44h 1/1 Running 0 25m
注意:
如果查看filebeat的日志发现无法节点网络通信, 请使用SNAT进行转换, 如果通讯正常不必进行下面操作:# 允许node1上的filebeat所有网络访问node网络, 通过node1为代理(node1上执行) iptables -t nat -A POSTROUTING -s 192.168.85.0/24 -d 192.168.204.0/24 -j SNAT --to-source 192.168.204.4 # 允许node2上的filebeat所有网络访问node网络, 通过node2为代理(node2上执行) iptables -t nat -A POSTROUTING -s 192.168.58.0/24 -d 192.168.204.0/24 -j SNAT --to-source 192.168.204.6
通过kabina观察4个节点上面的filebeat daemonset的日志是否收集:参考
Getting Started With Beats and the Elatic Stack
Elasticsearch 安装X-Pack
Deploy filebeat as daemonset in kubernetes cluster
Filebeat 模块列表
Install elaticdearch
Install kibana
应用日志收集
相关文章推荐
- Kubernetes部署ELK并使用Filebeat收集容器日志
- 使用Filebeat 6 收集多个目录的日志并发送到lostash
- 使用elasticsearch和filebeat做日志收集
- ELK实战之使用filebeat代替logstash收集日志
- elk6.3.1+zookeeper+kafka+filebeat收集dockerswarm容器日志
- 使用 Filebeat 收集日志
- elk的安装部署三(kibana的安装及使用filebeat收集日志)
- logstash与filebeat收集日志
- 在CentOS上集成filebeat+ELK docker收集日志
- logstash与filebeat收集日志
- Filebeat日志收集器 安装和配置
- Filebeat 日志收集器 安装和配置
- 使用filebeat替代logstash进行日志采集
- filebeat -> logstash -> elasticsearch -> kibana ELK 日志收集搭建
- logstash与filebeat收集日志
- logstash与filebeat收集日志
- Filebeat 日志收集器 安装和配置
- ELK日志系统:Filebeat使用及Kibana如何设置登录认证
- filebeat收集日志
- logstash与filebeat收集日志