March 2, 2021
By: dirk

Mulog整合

  1. Mulog整合
    1. Mulog 整合步骤
    2. Prometheus 查询数据
    3. 遗留问题

Mulog整合

大神之前已经对Log做过一次讲解了,可以先看下。传送门

Mulog 整合步骤

  1. 在 project.clj 文件中引入相应 jar 包
     :dependencies [[com.brunobonacci/mulog "0.6.5"]
                  [com.brunobonacci/mulog-prometheus "0.6.5"]
                  [com.brunobonacci/mulog-zipkin "0.2.0"]]
    
  2. 在 core.clj 文件中引入
    (:require [com.brunobonacci.mulog :as u]
              [com.brunobonacci.mulog.publishers.prometheus :as prom])
    
  3. 在 config.edn 文件中配置环境变量
    :env :dev
    
  4. 定义 mulog
    (defonce log-stopper (atom nil))
    (mount/defstate mulog
        :start (do (init-events)
              (if (= :dev1 (:env env))
                (reset! log-stopper (u/start-publisher! {:type :console}))
                (let [pub (prom/prometheus-publisher
                           {:type :prometheus
                            :push-gateway {:job "alk-mulog"
                                           :instance "alk-web"
                                           :endpoint "http://ip:9091"}})]
                  (reset! log-stopper (u/start-publisher! {:type :inline :publisher pub})))))
        :stop (@log-stopper))
    
  5. 在需要打 log 的地方引入
    (u/log ::doctor-login
         :province (:province doctor)
         :city (:city doctor)
         :region (:region doctor)
         :hospital-id (:hospital-id doctor)
         :hospital-name (:hospital-name doctor)
         :office-id (:office-id doctor)
         :office-name (:office-name doctor)
         :doctor-id (:doctor-id doctor)
         :doctor-name (:name doctor)
         :instance "doctor_login"
    

Prometheus 查询数据

对于 mulog 采集上来的数据,可以使用 PromeQL 来进行查询汇总。 PromeQL是prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。 当prometheus采集到相对应的监控指标样本数据后,可以通过promQL对监控样本数据进行查询。参考地址

Prometheus 提供了 HTTP API 用来对数据进行查询。参考地址

核心 API 有两个:

  1. GET /api/v1/query

    使用此接口可以查询 PromeQL 在特定时间点下的计算结果。
    
    参数说明:
    
    `query=`: PromQL 表达式
    
    `time=`: PromQL 时间戳。可选参数,默认情况下使用当前系统时间
    
    `timeout=`: 超时设置。可选参数。
    
  2. GET /api/v1/query_range

    使用此接口可以查询 PromeQL 在一段时间内的计算结果。
    
    参数说明:
    
    `query=`: PromQL 表达式
    
    `start=`: 开始时间
    
    `end=`: 结束时间
    
    `step=`: 查询步长
    
    `timeout=`: 超时设置。可选参数。
    

遗留问题

  1. PushGateWay 与 Prometheus 数据同步问题 pushgateway 每次只向 prometheus 返回最后一次推送的数据,并不是从上次抓取的地方重新抓取