您的位置:首页 > 其它

使用filebeat收集kubernetes容器日志

2018-02-09 14:03 4235 查看
kubernetes官方插件使用EFK来处理容器日志, 其中F指代Fluentd(Fluentd属于CNCF项目), 用于收集容器的日志。但是由于Fluentd用起来的确不怎么舒服(Ruby风格配置文件), 而Logstash又过于重量级(光启动就需要消耗大约500M内存), 而Elatic家族的Beats系列中的Filebeat既轻量又无依赖, 因此是作为DaemonSet部署的不二之选。

架构

在进行日志收集的过程中, 我们首先想到的是使用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

应用日志收集
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: