efk ki日志方案 - tencentmusic/cube-studio GitHub Wiki

整体方案

日志采集

  1. 训练、推理、平台日志通过部署filebeat采集器容器控制台采集发送到es集群中,并提供kibana和平台api查询接口
  2. 训练、推理、平台日志通过部署ilogtail采集器采集容器控制台、和容器内部日志发送到kafka集群的不同topic给大数据分析提供原始数据
  3. 训练、推理、平台日志需要交给大数据分析的需要写入环境变量ilogtail=true才会发送到kafka中

ES:

1、存储日志索引元数据

2、用于日志Kibana搜索和提供API给平台查询

3、索引规则:logging-yy.dd.ss

4、存储天数:30天|15天

Fliebeat:

1、采集pod控制台训练、推理、命名空间日志存储到es中

Kibana:

1、用于web可是化日志搜索

Ilogtail:

https://ilogtail.gitbook.io/ilogtail-docs/

1、采集pod控制台、pod内部文件日志动态存储到kafak的不同topic中

Kafka:

1、根据不同的topic存储需要分析的业务日志

2、接受prometheus-kafka-adapter存放metrics指标数据

3、topics命名规则:pod-{container.name}

4、存储天数:7天

日志存储规范:

  • 前端nginx业务日志

    • 采集路径:/var/log/nginx/access.log

    • 存储方式:容器内部文件

    • 存储json格式

      log_format  main  '{"timestamp": "$time_iso8601", "remote_addr": "$remote_addr",'
         	                '"vhost": "$http_host", "upstream_addr": "$upstream_addr", "upstream_status": "$upstream_status",'
          			'"request_time": $request_time, "request_length": $request_length, "status": $status,'
          			'"request": "$request", "request_url": "$request_uri", "url": "$uri", "args": "$args",'
          			'"requestid": "$sent_http_X_Request_ID", "content_type": "$sent_http_content_type",'
         			'"http_cookie": "$http_cookie", "connection_requests": "$connection_requests",'
          			'"request_completion": "$request_completion", "limit_rate": "$limit_rate", "request_method":'
          			'"$request_method", "http_referrer": "$http_referer", "body_bytes_sent": $body_bytes_sent,'
          			'"http_x_forwarded_for": "$http_x_forwarded_for", "http_user_agent": "$http_user_agent",'
          			'"upstream_response_time": "$upstream_response_time"}';
      
  • 后端平台日志

    • 存储方式

      • 容器控制台
      • 采集规则:
          env:
          - name: ilotail
            value: "true"
      
  • 训练pipeline日志

    • 采集方式 1、控制台日志,容器内部文件日志

    • 采集规则:

      模型训练-->任务流-->修改-->全局环境变量 image.png

    • 2、容器内部

      • 采集路径:/var/log/pipeline 如业务不支持配置此目录,可软链接过去:如 ln -s /home/work/app/app.log /var/log/piplenine/xxx.log
  • 推理服务日志

    采集方式: 控制台日志,容器内部文件日志

    采集规则: 服务化-->服务上线-->修改--全局环境变量

    企业微信截图_016f6b44-d86b-4819-98ca-b0ad47c2a99d.png

    • 容器内部
      • 采集路径:/var/log/service 可软链接过去:如 ln -s /home/work/app/app.log /var/log/service/xxx.log

部署过程

  1. 部署es+filebeat+kibana

    echo "############### 部署EFK,默认es是单节点不影响单机和集群部署使用。集群扩容3副本即可
    mkdir -pv /data/efk-es{1..3}
    kubectl create ns logging
    kubectl apply -f efk/pv/
    kubectl apply -f efk/
    

    访问:http://ip/logging

  2. 部署kafka+ilogtail

mkdir -pv /data/kafka{1..3}
mkdir -pv /data/zk{1..3}
echo "############## 部署kafka operater cluster##################"
kubectl apply -f kafka/storage-class-zk.yaml -f kafka/storage-class-kafka.yaml
if [ `kubectl get node|grep -v NAME|wc -l` -gt 2 ];then
  echo "install cluster kafka"
  kubectl apply -f kafka/cluster/pv-zk1.yaml -f kafka/cluster/pv-zk2.yaml -f kafka/cluster/pv-zk3.yaml
  kubectl apply -f kafka/cluster/pv-kafka1.yaml -f kafka/cluster/pv-kafka2.yaml -f kafka/cluster/pv-kafka3.yaml

  kubectl apply -f kafka/cluster/kafka-operator.yaml
  kubectl wait crd/kafkas.kafka.strimzi.io --for condition=established --timeout=90s
  kubectl apply -f kafka/cluster/kafka-external-svc.yaml
  kubectl apply -f kafka/cluster/kafka-cluster.yaml

else
  echo "install single kafka"
  kubectl apply -f kafka/single/pv-zk1.yaml
  kubectl apply -f kafka/single/pv-kafka1.yaml
  kubectl apply -f kafka/single/kafka-operator.yaml
  kubectl wait crd/kafkas.kafka.strimzi.io --for condition=established --timeout=90s
  kubectl apply -f kafka/single/kafka-external-svc.yaml
  kubectl apply -f kafka/single/kafka-cluster.yaml
fi

kubectl apply -f ilogtail/