操作方法:在 Kubernetes 中搭建 Fluentd、Elastic search 和 Kibana

如何在Kubernetes安装Fluentd、Elastic Search和Kibana来搜索日志

先决条件

安装 Elasticsearch 和 Kibana

  1. 为监测工具创建命名空间并添加 Helm Repo 用于Elastic Search

    1. kubectl create namespace dapr-monitoring
  2. 添加 Elastic helm repo

    1. helm repo add elastic https://helm.elastic.co
    2. helm repo update
  3. 使用 Helm 安装 Elastic Search

默认情况下,Chart 必须在不同的节点上创建3个副本。 如果您的集群少于3个节点,请指定一个较低的副本数量。 例如,将它设置为 1:

  1. helm install elasticsearch elastic/elasticsearch -n dapr-monitoring --set replicas=1

否则:

  1. helm install elasticsearch elastic/elasticsearch -n dapr-monitoring

如果您正在使用 minikube 或者想要禁用持久化卷来开发,您可以使用以下命令禁用它:

  1. helm install elasticsearch elastic/elasticsearch -n dapr-monitoring --set persistence.enabled=false,replicas=1
  1. 安装 Kibana

    1. helm install kibana elastic/kibana -n dapr-monitoring
  2. 校验

    确保 Elastic Search 和 Kibana 正在您的Kubernetes 集群中运行。

    1. kubectl get pods -n dapr-monitoring
    2. NAME READY STATUS RESTARTS AGE
    3. elasticsearch-master-0 1/1 Running 0 6m58s
    4. kibana-kibana-95bc54b89-zqdrk 1/1 Running 0 4m21s

安装 Fluentd

  1. 安装 config map 和 Fluentd 作为守护程序

下载这些配置文件:

注意:如果你已经在你的集群中运行 Fluentd,请启用 nested json 解析器从 Dapr 解析JSON 格式的日志。

将配置应用到您的集群:

  1. kubectl apply -f ./fluentd-config-map.yaml
  2. kubectl apply -f ./fluentd-dapr-with-rbac.yaml
  1. 确保 Fluentd 作为守护程序运行;实例的数量应与集群节点的数量相同。 在下面的例子中,我们只有一个节点。
  1. kubectl get pods -n kube-system -w
  2. NAME READY STATUS RESTARTS AGE
  3. coredns-6955765f44-cxjxk 1/1 Running 0 4m41s
  4. coredns-6955765f44-jlskv 1/1 Running 0 4m41s
  5. etcd-m01 1/1 Running 0 4m48s
  6. fluentd-sdrld 1/1 Running 0 14s

使用 JSON 格式化日志安装 Dapr

  1. 使用 JSON 格式化日志启用 Dapr

    1. helm repo add dapr https://dapr.github.io/helm-charts/
    2. helm repo update
    3. helm install dapr dapr/dapr --namespace dapr-system --set global.logAsJson=true
  2. 在 Dapr sidecar 中启用 JSON 格式化日志

添加 dapr.io/log-as-json: "true" annotation 到你的部署yaml.

You can run Kafka locally using this Docker image. To run without Docker, see the getting started guide here.

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: pythonapp
  5. namespace: default
  6. labels:
  7. app: python
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: python
  13. template:
  14. metadata:
  15. labels:
  16. app: python
  17. annotations:
  18. dapr.io/enabled: "true"
  19. dapr.io/app-id: "pythonapp"
  20. dapr.io/log-as-json: "true"
  21. ...

搜索日志

注意: Elastic Search 需要一段时间才能索引 Fluentd 发送的日志。

  1. Port-forward 到 svc/kibana-kibana
  1. $ kubectl port-forward svc/kibana-kibana 5601 -n dapr-monitoring
  2. Forwarding from 127.0.0.1:5601 -> 5601
  3. Forwarding from [::1]:5601 -> 5601
  4. Handling connection for 5601
  5. Handling connection for 5601
  1. 浏览 http://localhost:5601

  2. 点击Management -> Index Management

kibana 管理

  1. 请稍候,直到Dapr-* 被索引。

索引日志

  1. 一旦dapr-* 被索引了,请点击 Kibana-> Index Patterns 并创建索引模式

创建索引模式

  1. 在index pattern中输入 dapr*定义索引模式

定义索引模式

  1. 选择time stamp填入: @timestamp

timestamp

  1. 确认 scope, type, app_id, level, 等正在索引。

注意:如果您找不到索引字段,请稍候。 它取决于正在进行弹性搜索的数据量和资源大小。

正在索引

  1. 点击 discover 图标并搜索 scope:*

注:根据数据量和资源进行日志检索需要一些时间。

发现

参考资料