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 中的结构化字段

安装 fluent-bit ,以及导入日志目录到es中

收集kubernetes控制台日志及元数据(fluent-bit+es+kibana搭建)

如何使用debug调试工具

idea debug调试怎么使用

移动端页面手机调试debug