fluent-bit debug调试,采集kubernetes podIP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fluent-bit debug调试,采集kubernetes podIP相关的知识,希望对你有一定的参考价值。
参考技术A 有时候调试fluent-bit的配置,达到想要的输出效果,并不是件简单的事情,以下通过debug镜像调试fluent-bit采集kubernetes Pod的IP。fluent-bit官方文档给出了用于调试的镜像:
https://docs.fluentbit.io/manual/installation/docker
dockerhub仓库链接为:
https://hub.docker.com/r/fluent/fluent-bit/
用到的secret:fluent-bit-debug-config如下,包含两个key:
第一个parsers.conf:为空即可;配置细节可以参考官方文档:
Configuration File
第二个fluent-bit.conf配置需根据情况配置,以下主要在不同场景,给出fluent-bit.conf。也会涉及到kubesphere、Filter CRD一起使用。
exec进入容器可以使用/fluent-bit/bin/fluent-bit调试:
以下用一个简单的配置文件采集calico-node-* pod的日志:
fluent-bit-debug容器内使用以下命令启动测试:
可以看到stdout日志输出:
截取重要部分,可以看到没经过处理采集到的k8s日志格式。
将kubernetes块展开,并添加kubernetes_前缀:
这次测试输出,截取重要部分:
或者用正则:
修改之后:
结合kubesphere Filter CR,配置采集podIPs,并去掉其他不相关的annotations。
因使用calico作为CNI,所以在pod annotations中会被添加上podIP相关的注解。
需要保留注解中的某一个key(cni.projectcalico.org/podIPs),移除掉其他key,所以下面将要保留的key修改名称之后,移除掉整个annotations。
kubernetes Filter CR配置如下:
由kubernetes Filter CR生成的fluent-bit config配置如下(只看Filter部分,Input、Output CR被省略)
可以在kibana看到采集到的podIP:
收集kubernetes控制台日志及元数据(fluent-bit+es+kibana搭建)
Fluent-bit是一款开源的日志转发器,有着小而精巧,功能强大的特点。支持多目的地发送;支持获取k8s的元数据(例如:namespace,hostip,podname等);支持messagepack,json等多种序列化方式;友好支持数据二次加工等系列优点。是一款日志收集利器,你值得拥有。
基本信息
> kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T12:22:21Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.3", GitCommit:"d2835416544f298c919e2ead3be3d0864b52323b", GitTreeState:"clean", BuildDate:"2018-02-07T11:55:20Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
> 下载相关代码(主要是yaml文件)
《elasticsearch、kibana》 https://github.com/kubernetes/kubernetes.git
《fluent-bit》 https://github.com/fluent/fluent-bit-kubernetes-logging.git
部署elasticsearch
yaml目录:cluster/addons/fluentd-elasticsearch
> 部署statefulset
kubectl create -f es-statefulset.yaml
注意:我部署的时候镜像版本是:k8s.gcr.io/elasticsearch:v6.2.4
初始化镜像: alpine:3.6
> 部署configmap
kubectl create -f fluentd-es-configmap.yaml
> 部署Service
kubectl create -f es-service.yaml
> 查看service的信息并记下来,下面要用
[root@cicd-node01 es]# kubectl get svc -o wide -n logging
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
elasticsearch-logging NodePort 172.29.233.30 <none> 9200:30565/TCP 9h k8s-app=elasticsearch-logging
部署fluent-bit
yaml文件目录:fluent/fluent-bit-kubernetes-logging
> 创建相关资源
kubectl create -f fluent-bit-role-binding.yaml
kubectl create -f fluent-bit-service-account.yaml
kubectl create -f fluent-bit-role.yaml
> 创建DaemonSet
进入output/elasticsearch目录
kubectl create -f cluent-bit-configmap.yaml
> 修改fluent-bit-ds.yaml文件的这部分配置
- name: FLUENT_ELASTICSEARCH_HOST
value: "10.151.33.87"
- name: FLUENT_ELASTICSEARCH_PORT
value: "30565"
这个地方修改elasticsearch的Host和Port的值(就是上面提到的)
kubectl create -f fluent-bit-ds.yaml
注意:我在使用的时候镜像版本是:fluent/fluent-bit:0.13.5
部署Kibana
yaml目录:kubernetes/tree/master/cluster/addons/fluentd-elasticsearch
> 修改kibana-deployment.yaml的配置信息
env:
- name: ELASTICSEARCH_URL
value: http://10.151.33.87:30565
# - name: SERVER_BASEPATH
#value: /api/v1/namespaces/logging/services/kibana-logging/proxy
ELASTICSEARCH_URL是elasticsearch的地址.
> 创建deployment
kubectl create -f kibana-deployment.yaml
> 创建kibana-service
kubectl create -f kibana-service.yaml
我在创建的时候镜像版本是:docker.elastic.co/kibana/kibana-oss:6.2.4
> 获取访问信息
[root@cicd-node01 es]# kubectl get svc -n logging
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kibana-logging NodePort 172.29.16.48 <none> 5601:31295/TCP 7h
然后以nodeIP+nodePort就能访问。
我们可以看到一些元数据:pod_name,name_space,hostip等,这有利于我们对问题定位、分析,提高效率。
fluent-bit相关的Tips
fluent-bit采集的数据可以输出到http接口,但是默认使用了message的格式,不方便阅读和二次开发,我们可以修改output的格式,文件:fluent-bit-configmap.yaml,修改方式如下:
output-http.conf: |
[OUTPUT]
Name http
Match *
Host ${FLUENT_ELASTICSEARCH_HOST}
Port ${FLUENT_ELASTICSEARCH_PORT}
URI /
Format json
上述修改完毕后,还需要注册这个conf,如下:
data:
# Configuration files: server, input, filters and output
# ======================================================
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
@INCLUDE input-kubernetes.conf
@INCLUDE filter-kubernetes.conf
#@INCLUDE output-elasticsearch.conf
@INCLUDE output-http.conf
结束
安装顺序,按照这篇文章来可以避免一些额外的问题,安装完成后,你可以体验了,同时,因为我们知道数据转发的接口,所以,我们可以二次加工数据,进一步提高定位问题的效率,相信你会喜欢的~~~
以上是关于fluent-bit debug调试,采集kubernetes podIP的主要内容,如果未能解决你的问题,请参考以下文章
Fluent-bit - 将 json 日志拆分为 Elasticsearch 中的结构化字段