starrocks基於prometheus實現監控告警

張衝andy發表於2023-04-26

監控報警


本文介紹如何為 StarRocks 設定監控報警。


StarRocks 提供兩種監控報警的方案。企業版使用者可以使用內建的 StarRocksManager,其自帶的 Agent 從各個 Host 採集監控資訊,上報至 Center Service,然後做視覺化展示。StarRocksManager 提供郵件和 Webhook 的方式傳送報警通知。你也可以使用開源 Prometheus+Grafana 方案,StarRocks 提供了相容 Prometheus 的資訊採集介面,可以透過直接連線 BE 或 FE 的 HTTP 埠來獲取叢集的監控資訊。

Prometheus 是一個擁有多維度資料模型的、靈活的查詢語句的時序資料庫。它可以透過 Pull 或 Push 採集被監控系統的監控項,存入自身的時序資料庫中。並且透過豐富的多維資料查詢語言,滿足使用者的不同需求。

Grafana 是一個開源的 Metric 分析及視覺化系統。支援多種資料來源,詳情可參考官網文件。透過對應的查詢語句,從資料來源中獲取展現資料。透過靈活可配置的 Dashboard,快速的將這些資料以圖表的形式展示給使用者。


監控架構


Prometheus 透過 Pull 方式訪問 FE 或 BE 的 Metric 介面,然後將監控資料存入時序資料庫。使用者可以透過 Grafana 配置 Prometheus 為資料來源,自定義繪製 Dashboard。Alertmanage 匹配採集到的資料對比starrocks_rules閾值觸發告警推送。 


部署 Prometheus + Grafana + Alertmanage


 從  Prometheus 官網 下載最新版本的 Prometheus。(安裝部署略)


從  Grafana 官網  下載最新版本的 Grafana(安裝部署略)


從   下載最新版本的 alertmanager(安裝部署略)


配置 Prometheus


在 prometheus.yml 中新增 StarRocks 監控相關的配置

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']
      # - alertmanager:9093
rule_files:
  - "./rules/starrocks_rules.yml"      
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'StarRocks_Cluster01' # 每一個叢集稱之為一個job,可以自定義名字作為StarRocks叢集名
    metrics_path: '/metrics'    # 指定獲取監控專案的Restful Api
    static_configs:
      - targets: ['fe_host1:http_port','fe_host3:http_port','fe_host3:http_port']
        labels:
          group: fe # 這裡配置了 fe 的 group,該 group 中包含了 3 個 Frontends
      - targets: ['be_host1:webserver_port', 'be_host2:webserver_port', 'be_host3:webserver_port']
        labels:
          group: be # 這裡配置了 be 的 group,該 group 中包含了 3 個 Backends
  - job_name: 'StarRocks_Cluster02' # 可以在Prometheus中監控多個StarRocks叢集
    metrics_path: '/metrics'
    static_configs:
      - targets: ['fe_host1:http_port','fe_host3:http_port','fe_host3:http_port']
        labels:
          group: fe
      - targets: ['be_host1:webserver_port', 'be_host2:webserver_port', 'be_host3:webserver_port']
        labels:
          group: be


配置 StarRocks Dashboard 模版


說明:StarRocks 1.19.0 和 2.4.0 版本的監控 Metric Name 有調整,需要下載下面對應版本 DashBoard 模版。




確認資料來源可用後,點選左邊導航欄的 + 號以新增 Dashboard。這裡我們使用上文下載的 StarRocks 的 Dashboard 模板。依次點選左邊的導航欄 + 號,Import,和 Upload Json File,匯入 JSON 檔案。

匯入後,可以命名 Dashboard,預設是 StarRocks Overview。同時,需要選擇資料來源,這裡選擇之前建立的 starrocks_monitor。

點選 Import 完成匯入。至此,您可以看到 StarRocks 的 Dashboard 展示。


理解 Dashboard


本小節簡要介紹 StarRocks Dashboard。


注意:Dashboard 的內容可能會隨版本升級,不斷更新,請參考上文 Dashboard 模版。


頂欄


頁面左上角為 Dashboard 名稱,右上角顯示當前監控時間範圍。您可以下拉選擇不同的時間範圍,還可以指定定時重新整理頁面間隔。


cluster_name: 即 Prometheus 配置檔案中的各個 job_name,代表一個 StarRocks 叢集。如果選擇不同的 Cluster,下方的圖表將展示對應叢集的監控資訊。

fe_master: 對應叢集的 Leader FE 節點。

fe_instance: 對應叢集的所有 FE 節點。選擇不同的 FE,下方的圖表將展示對應 FE 的監控資訊。

be_instance: 對應叢集的所有 BE 節點。選擇不同的 BE,下方的圖表將展示對應 BE 的監控資訊。

interval: 部分圖表展示了速率相關的監控項,這裡可選擇以特定間隔進行取樣計算速率。


當前 Dashboard 有如下 Row(持續更新中):

Overview: 所有 StarRocks 叢集的彙總展示。

Cluster Overview: 選定叢集的彙總展示。

Query Statistic: 選定叢集的查詢相關監控。

Jobs: 匯入任務相關監控。

Transaction: 事務相關監控。

FE JVM: 選定 FE 的 JVM 監控。

BE: 選定叢集 BE 的彙總展示。

BE Task: 選定叢集 BE 的任務資訊展示。


部分圖示展示



詳細監控指標含義見:


配置 StarRocks 的 Alertmanager

#alertmanager的告警郵件配置 
 cat /opt/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'mail-xxx.xxx.com.cn:25'
  smtp_from: 'prometheusxxx@dflxxx.com.cn'
  smtp_auth_username: 'prometheusxx@xx.com.cn'
  smtp_auth_password: 'xxxx'
  smtp_require_tls: false
route:
  group_by: ['alertname','status']
  group_wait: 30s
  group_interval: 30s
  repeat_interval: 30m
  receiver: 'dba_group'
  
  routes:
    - receiver: 'dba_group'
      continue: true
      match_re:
        alertname: ".*"
receivers:
  - name: 'dba_group'
    email_configs:
    - send_resolved: true
      to: 'chongzh@szlanyou.com'
# starrocks 告警規則配置
# design by chongzh  2023/4/26
cat /opt/prometheus/rules/starrocks_rules.yml                                                                    
groups:
- name: for_common
  rules:
  - alert: StarRocks-fe-down
    expr: up{group="fe"} != 1
    for: 0m
    labels:
      level: 3
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'StarRocks-fe,have some problem.'
  - alert: StarRocks-de-down
    expr: up{group="be"} != 1
    for: 0m
    labels:
      level: 3
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'StarRocks-de,have some problem.'
  - alert: StarRocks-FE-JVM-Heap-Stat
    expr: sum(jvm_heap_size_bytes{group="fe",type="used"} * 100) by (instance,job)/sum(jvm_heap_size_bytes{group="fe", type="max"}) by (instance,job) >= 90
    for: 0m
    labels:
      level: 3
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'StarRocks Cluster FE JVM Heap Stat 使用率超90% '
  - alert: StarRocks-Cluster-Disk-State
    expr: starrocks_be_disks_state != 1
    for: 0m
    labels:
      level: 3
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'StarRocks-BE-Disk-State,have some problem.'
  - alert: StarRocks-Cluster-BDBJE Write
    expr: starrocks_fe_editlog_write_latency_ms{quantile="0.99"} > 5000
    for: 1m
    labels:
      level: 2
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'starrocks_fe_editlog_write too slow (ms) '            
  - alert: StarRocks-be_max_disk_io_util_percent
    expr: starrocks_be_max_disk_io_util_percent > 80
    for: 1m
    labels:
      level: 2
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'starrocks_be_max_disk_io_util_percent 超80% '        
  - alert: starrocks_fe_query_latency_ms
    expr: sum(starrocks_fe_query_latency_ms{quantile="0.99"}) by (instance) > 5000
    for: 1m
    labels:
      level: 2
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'starrocks_fe_query_latency_ms 超5秒 '
  - alert: StarRocks-Cluster-BE-CPU-Idle
    expr: (sum(rate(starrocks_be_cpu{mode="idle"}[5m])) by (job))/(sum(rate(starrocks_be_cpu[5m])) by (job))*100 < 20
    for: 0m
    labels:
      level: 3
    annotations:
      cur_value: '{{ $value | printf "%.2f" }}'
      description: 'StarRocks Cluster BE CPU Idle 小於 20% '


告警測試


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2948963/,如需轉載,請註明出處,否則將追究法律責任。

相關文章