使用Vmalert監控報警
前面我們已經介紹了可以使用 vmagent 代替 prometheus 抓取監控指標資料,要想完全替換 prometheus 還有一個非常重要的部分就是報警模組,之前我們都是在 prometheus 中定義報警規則評估後傳送給 alertmanager 的,同樣對應到 vm 中也有一個專門來處理報警的模組:vmalert。
- 與 VictoriaMetrics TSDB 整合。
- VictoriaMetrics MetricsQL 支援和表示式驗證。
- Prometheus 告警規則定義格式支援。
- 與 Alertmanager 整合。
- 在重啟時可以保持報警狀態。
- Graphite 資料來源可用於警報和記錄規則。
- 支援記錄和報警規則重放。
- 非常輕量級,沒有額外的依賴。
要開始使用 vmalert,需要滿足以下條件:
- 報警規則列表:要執行的 PromQL/MetricsQL 表示式。
- 資料來源地址:可訪問的 VictoriaMetrics 例項,用於規則執行。
- 通知程式地址:可訪問的 Alertmanager 例項,用於處理,彙總警報和傳送通知。
首先需要安裝一個 Alertmanager 用來接收報警資訊,前面章節中我們已經詳細講解過了,這裡不再贅述了,對應的資源清單如下所示:
# alertmanager.yaml apiVersion: v1 kind: ConfigMap metadata: name: alert-config namespace: kube-vm data: config.yml: |- global: resolve_timeout: 5m smtp_smarthost: 'smtp.163.com:465' smtp_from: 'xxx@163.com' smtp_auth_username: 'xxx@163.com' smtp_auth_password: '' # 使用網易郵箱的授權碼 smtp_hello: '163.com' smtp_require_tls: false route: group_by: ['severity', 'source'] group_wait: 30s group_interval: 5m repeat_interval: 24h receiver: email receivers: - name: 'email' email_configs: - to: 'xxxxxx@qq.com' send_resolved: true --- apiVersion: v1 kind: Service metadata: name: alertmanager namespace: kube-vm labels: app: alertmanager spec: selector: app: alertmanager type: NodePort ports: - name: web port: 9093 targetPort: http --- apiVersion: apps/v1 kind: Deployment metadata: name: alertmanager namespace: kube-vm labels: app: alertmanager spec: selector: matchLabels: app: alertmanager template: metadata: labels: app: alertmanager spec: volumes: - name: cfg configMap: name: alert-config containers: - name: alertmanager image: prom/alertmanager:v0.21.0 imagePullPolicy: IfNotPresent args: - "--config.file=/etc/alertmanager/config.yml" ports: - containerPort: 9093 name: http volumeMounts: - mountPath: "/etc/alertmanager" name: cfg
Alertmanager 這裡我們只配置了一個預設的路由規則,根據 severity、source 兩個標籤進行分組,然後將觸發的報警傳送到 email 接收器中去。
接下來需要新增用於報警的規則配置,配置方式和 Prometheus 一樣的:
# vmalert-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: vmalert-config namespace: kube-vm data: record.yaml: | groups: - name: record rules: - record: job:node_memory_MemFree_bytes:percent # 記錄規則名稱 expr: 100 - (100 * node_memory_MemFree_bytes / node_memory_MemTotal_bytes) pod.yaml: | groups: - name: pod rules: - alert: PodMemoryUsage expr: sum(container_memory_working_set_bytes{pod!=""}) BY (instance, pod) / sum(container_spec_memory_limit_bytes{pod!=""} > 0) BY (instance, pod) * 100 > 60 for: 2m labels: severity: warning source: pod annotations: summary: "Pod {{ $labels.pod }} High Memory usage detected" description: "{{$labels.instance}}: Pod {{ $labels.pod }} Memory usage is above 60% (current value is: {{ $value }})" node.yaml: | groups: - name: node rules: # 具體的報警規則 - alert: NodeMemoryUsage # 報警規則的名稱 expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 30 for: 1m labels: source: node severity: critical annotations: summary: "Node {{$labels.instance}} High Memory usage detected" description: "{{$labels.instance}}: Memory usage is above 30% (current value is: {{ $value }})"
這裡我們新增了一條記錄規則,兩條報警規則,更多報警規則配置可參考 。
然後就可以部署 vmalert 元件服務了:
# vmalert.yaml apiVersion: v1 kind: Service metadata: name: vmalert namespace: kube-vm labels: app: vmalert spec: ports: - name: vmalert port: 8080 targetPort: 8080 type: NodePort selector: app: vmalert --- apiVersion: apps/v1 kind: Deployment metadata: name: vmalert namespace: kube-vm labels: app: vmalert spec: selector: matchLabels: app: vmalert template: metadata: labels: app: vmalert spec: containers: - name: vmalert image: victoriametrics/vmalert:v1.77.0 imagePullPolicy: IfNotPresent args: - -rule=/etc/ruler/*.yaml - -datasource.url= - -notifier.url= - -remoteWrite.url= - -evaluationInterval=15s - -httpListenAddr=0.0.0.0:8080 volumeMounts: - mountPath: /etc/ruler/ name: ruler readOnly: true volumes: - configMap: name: vmalert-config name: ruler
上面的資源清單中將報警規則以 volumes 的形式掛載到了容器中,透過 -rule 指定了規則檔案路徑,-datasource.url 指定了 vmselect 的路徑,-notifier.url 指定了 Alertmanager 的地址,其中 -evaluationInterval 引數用來指定評估的頻率的,由於我們這裡新增了記錄規則,所以還需要透過 -remoteWrite.url 指定一個遠端寫入的地址。
直接建立上面的資源清單即可完成部署。
☸ ➜ kubectl apply -f ☸ ➜ kubectl apply -f ☸ ➜ kubectl apply -f ☸ ➜ kubectl get pods -n kube-vm -l app=alertmanager NAME READY STATUS RESTARTS AGE alertmanager-d88d95b4f-z2j8g 1/1 Running 0 30m ☸ ➜ kubectl get svc -n kube-vm -l app=alertmanager NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE alertmanager NodePort 10.100.230.2 9093:31282/TCP 31m ☸ ➜ kubectl get pods -n kube-vm -l app=vmalert NAME READY STATUS RESTARTS AGE vmalert-866674b966-675nb 1/1 Running 0 7m17s ☸ ➜ kubectl get svc -n kube-vm -l app=vmalert NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmalert NodePort 10.104.193.183 8080:30376/TCP 22m
部署成功後,如果有報警規則達到了閾值就會觸發報警,我們可以透過 Alertmanager 頁面檢視觸發的報警規則:
同樣 vmalert 也提供了一個簡單的頁面,可以檢視所有的 Groups:
也可以檢視到報警規則列表的狀態:
還可以檢視到具體的一條報警規則的詳細資訊,如下所示:
報警規則觸發後怎麼傳送,傳送到哪個接收器就是 Alertmanager 決定的了。
同樣的上面我們新增的記錄規則會透過 remote write 傳遞給 vminsert 保留下來,所以我們也可以透過 vmselect 查詢到。
到這裡基本上我們就完成了使用 vm 代替 prometheus 來進行監控報警了,vmagent 採集監控指標,vmalert 用於報警監控,vmstorage 儲存指標資料,vminsert 接收指標資料,vmselect 查詢指標資料,已經完全可以不使用 prometheus 了,而且效能非常高,所需資源也比 prometheus 低很多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2899066/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Prometheus監控報警系統Prometheus
- CentOS 配置OOM監控報警CentOSOOM
- 從零搭建Prometheus監控報警系統Prometheus
- zabbix監控之同時向多人郵件報警
- 技術分享| 如何使用Prometheus實現系統監控報警郵件通知Prometheus
- .Net Core服務監控報警指標上報Prometheus+Grafana指標PrometheusGrafana
- 圖解JanusGraph系列 - JanusGraph指標監控報警(Monitoring JanusGraph)圖解指標
- 我們的系統應該配置哪些監控報警項?
- 生產區域人數超員監控報警系統
- 在 KubeSphere 中使用 DevOps 部署 Java 微服務配置監控預警devJava微服務
- 大資料技術 - 監控預警大資料
- 智慧校園:資料機房動環監控報警系統
- 支援全平臺的伺服器監控報警系統 Shinken伺服器
- 監控報警系統的指標、規則與執行閉環指標
- Spring Cloud 快速入門(四)Hystrix Dashboard 監控儀表盤、Turbine 聚合監控、服務降級報警機制SpringCloud
- 裝置故障監控報警運維工單系統有什麼功能運維
- 如何構建智慧監控預警管理平臺?
- 年輕人的第一個go程式:監控資料庫欄位 報警Go資料庫
- 修改glogin.sql引發的生產系統監控的虛假報警SQL
- Spark+Kafka實時監控Oracle資料預警SparkKafkaOracle
- Redis一站式管理平臺工具,支援叢集建立,管理,監控,報警Redis
- 使用Prometheus監控FlinkPrometheus
- SpringBoot使用prometheus監控Spring BootPrometheus
- 智慧警務視覺化應用監控系統搭建視覺化
- 通達信條件預警使用教程(引用選股公式盤中實時監控)公式
- sql server 警報管理及實時監聽SQLServer
- 二次供水PLC系統如何連線觸控式螢幕進行監控並實現故障報警
- 監控採集上報和儲存監控資料策略
- upptime:使用GitHub Actions監控你的網站健康監控Github網站
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- 如何使用 Glances 命令監控
- 使用Splunk監控SAP Dump
- 監控索引的使用(轉)索引
- Zabbix監控使用進階
- zabbix使用163郵箱報警
- 振弦式感測器資料採集到水庫大壩監測雲平臺進行監控和報警
- 「服務端」node服務的監控預警系統架構服務端架構
- 中小水庫中的水情遙測系統如何實現遠端監控和自動報警?