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

Posted 容器时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了收集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


结束


安装顺序,按照这篇文章来可以避免一些额外的问题,安装完成后,你可以体验了,同时,因为我们知道数据转发的接口,所以,我们可以二次加工数据,进一步提高定位问题的效率,相信你会喜欢的~~~





以上是关于收集kubernetes控制台日志及元数据(fluent-bit+es+kibana搭建)的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes业务log-pilot日志收集实战配置-elkf

kubernets轻量 contain log 日志收集技巧

kubernetes-平台日志收集(ELK)

kubernetes集群搭建efk日志收集平台

简述Kubernetes容器日志收集原理!

Kubernetes集群容器运行日志收集