k8s上搭建loki日志服務並通過prometheus進行錯誤日志告警


1. 前言

prometheus 和 loki的基礎概念就不贅述了,如需查看請先移步到官網
prometheus -> https://prometheus.io/
loki -> https://grafana.com/oss/loki/

2. 要解決的問題

之前測試環境搭建Loki采集日志沒有設置ERROR級別告警的需求,現在正式環境需要添加日志告警了,最開始是直接通過grafana面板自帶的告警,但是感覺不太好使(也許是我配置的問題,很多本該告警的時候沒有告警),所以還是通過prometheus結合自己寫的hook來進行告警

這里也簡單說下grafana上添加Loki日志告警需要注意的一點:

  1. 添加datasource 選擇prometheus 但是在填寫路徑的時候並不是直接 http://loki地址:3100 而是 http://loki地址:3100/loki
  2. 規則什么的比較簡單 eg: count_over_time({container="xy-xxxx"} |= "INFO"[1m]) 就是查詢一分鍾container="xy-xxxx"日志中包含了INFO關鍵字的個數

3. 進入正題

loki 和 Prometheus-operator 的安裝可以參考 https://www.infracloud.io/blogs/grafana-loki-log-monitoring-alerting/

這篇只說在過程中需要注意的問題

  1. 我按照https://www.infracloud.io/blogs/grafana-loki-log-monitoring-alerting/ 教程中自定義的values.yaml文件會出現一些錯誤,所以我直接修改的helm包里面具體的字段 ,然后安裝沒有問題
  2. 需要增加自定義應用日志篩選

自定義應用日志篩選思路

首先要理清日志從打印到告警的整個過程是怎樣的

  1. 日志是loki中的promtail來負責的,所以如果需要對日志做篩選的工作那么就要在promtail這里來完成
  2. prometheus要獲取到日志的告警指標,我們知道prometheus是通過抓取目標的/metrics來獲取數據的,所以在promtail這里做日志篩選時就需要將自定義的指標暴露給prometheus
    在loki的官網中會發現有個pipeline_stages 和metrics兩個配置(我們的參考鏈接中也有提到這個,但並沒有說為什么要這么做,我也是看了官網才知道),可以滿足我們的需求
  3. prometheus通過promtail的/metrics獲取到信息后,需要設置告警rules ,因為之前我們是用prometheus-operator來搭建的,所以直接edit對應的rules文件是不能達到目的的,所以這里又涉及到自定義prometheus rules的步驟 這個可以參照我之前寫的筆記 https://www.cnblogs.com/zunwen/p/14023248.html
  4. helm安裝的loki中promtail 的configmap.yaml文件中 有關kubernetes_sd_config段的配置,很多感覺都沒用,下個步驟將貼下我現在用配置

有了思路直接貼配置也能看懂

promtail values.yaml

extraScrapeConfigs:
- job_name: sm-operation-logs
  pipeline_stages:
    - docker: {}
    - match:
        selector: '{app="sm-operation"}'
        stages:
        - regex:
            expression: '.*(?P<smoperation>ERROR.*)'
        - metrics:
            sm_operation_logs:
              config:
                action: inc
              description: too many ERROR logs
              source: smoperation
              type: Counter
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - action: drop
    regex: ''
    source_labels:
    - __meta_kubernetes_pod_annotation_kubernetes_io_config_mirror
    - __meta_kubernetes_pod_label_name
    - __meta_kubernetes_pod_label_app
  - action: replace
    source_labels:
    - __meta_kubernetes_pod_label_component
    target_label: __service__
  - action: keep
    regex: '[0-9a-z-.]+-[0-9a-f]{8,10}'
    source_labels:
    - __meta_kubernetes_pod_controller_name
  - action: replace
    regex: '([0-9a-z-.]+)-[0-9a-f]{8,10}'
    source_labels:
    - __meta_kubernetes_pod_controller_name
    target_label: __service__
  - source_labels:
    - __meta_kubernetes_pod_node_name
    target_label: __host__
  - action: drop
    regex: ''
    source_labels:
    - __service__
  - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
  - action: replace
    replacement: $1
    separator: /
    source_labels:
    - __meta_kubernetes_namespace
    - __service__
    target_label: job
  - action: replace
    source_labels:
    - __meta_kubernetes_namespace
    target_label: namespace
  - action: replace
    source_labels:
    - __meta_kubernetes_pod_name
    target_label: pod
  - action: replace
    source_labels:
    - __meta_kubernetes_pod_container_name
    target_label: container
  - replacement: /var/log/pods/*$1/*.log
    separator: /
    source_labels:
    - __meta_kubernetes_pod_annotation_kubernetes_io_config_mirror
    - __meta_kubernetes_pod_container_name
    - __meta_kubernetes_pod_uid
    target_label: __path__

prometheusRules

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app: prometheus-operator
    release: prometheus
  name: customize-rules
  namespace: kube-mon
spec:
  groups:
  - name: customize-rules
    rules:
    - alert: sm-operation-logs
      annotations:
        description: "total error logs of sm-operation over count {{ $value }}"
        summary: 錯誤日志量一分鍾內大於1
      expr: sum(increase(promtail_custom_sm_operation_logs[1m])) > 1
      for: 1m
      labels:
        serverity: critical

prometheus dashboard上查看效果

如若對你有幫助,我不嫌棄你給我撒點小費喲 哈哈 也可加個好友喲 viva8293 另外請備注來自博客園哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM