Loggie的监控与报警

Loggie的monitor eventbus被设计为发布和订阅模式,各个组件发送metrics到指定的topic中,由独立的listener来消费处理。

比如file source会将采集日志的一些指标数据,发送至filesource topic,由filesource listener来消费,filesource listener会将数据聚合计算之后,打印至日志,暴露出Prometheus指标。

组件和topic以及listener之间是松耦合关系,比如file source还会定时将全量匹配的日志文件指标发送至filewatcher topicfilewatcher listener会处理和暴露指标。

Monitor配置

monitor eventbus配置在全局的系统配置中,示例如下:

Config

  1. loggie:
  2. monitor:
  3. logger:
  4. period: 30s
  5. enabled: true
  6. listeners:
  7. filesource: ~
  8. filewatcher: ~
  9. reload: ~
  10. queue: ~
  11. sink: ~
  12. http:
  13. enabled: true
  14. port: 9196

其中logger控制所有的metrics指标的日志打印,会在period时间间隔将配置listeners产生的metrics聚合打印在Loggie日志中,便于回溯和排查问题。

listeners则用于配置相关的listener是否开启。

Prometheus格式metrics默认通过http.port端口暴露在/metrics。可以通过curl <podIp>:9196/metrics来查看当前的metrics指标。

日志采集核心指标

目前有以下的listener,主要包含:

  • filesource: 当前日志采集的指标数据,比如当前有哪些文件在采集中,采集状态如何
  • filewatcher: 定时的全量遍历(默认5min)配置path匹配的所有文件,监控全局采集状态,判断是否有未及时采集的文件等
  • reload: reload次数
  • queue: 队列状态
  • sink: 发送的指标,比如发生成功或者失败的个数等

部署Prometheus和Grafana

可以使用环境已有的Prometheus或者Grafana,如果需要新部署,可参考:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

使用Helm部署:

  1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. helm repo update
  3. helm install prometheus prometheus-community/kube-prometheus-stack -nprometheus --create-namespace

Note

由于众所周知的原因,你的环境里可能无法下载其中的某些k8s.gcr.io镜像,可以考虑下载chart包替换后再重新部署。

确认Pod正常running后,可以根据实际环境访问grafana。通过代理访问grafana的方式可参考:

  1. kubectl -nprometheus port-forward --address 0.0.0.0 service/prometheus-grafana 8181:80

Grafana用户名和密码可在prometheus-grafana sercret中,通过base64 -d来查看。

增加Loggie Prometheus监控

在部署了Loggie的Kubernetes集群中,需要创建如下的ServiceMonitor来让Prometheus采集Loggie Agent指标。

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: ServiceMonitor
  3. metadata:
  4. labels:
  5. app: loggie
  6. release: prometheus
  7. name: loggie-agent
  8. namespace: prometheus
  9. spec:
  10. namespaceSelector:
  11. matchNames:
  12. - loggie
  13. endpoints:
  14. - port: monitor
  15. selector:
  16. matchLabels:
  17. app: loggie
  18. instance: loggie

同时,我们需要在Grafana中添加install工程中的json来展示Loggie的监控控制台。

Note

Kubernetes版本和Grafana版本不同,可能导致图表展示不兼容,需要根据情况进行修改。

导入的Grafana图表目前包含监控大盘和节点Agent的监控图表,如下图所示:

Loggie的监控与报警 - 图1 Loggie的监控与报警 - 图2 Loggie的监控与报警 - 图3