Prometheus 監控MySQL資料庫

2021-12-22 運維博客

這裡我們演示中,prometheus以及mysqld_exporter都使用容器進行運行。這裡我的伺服器配置為阿里雲2h4g

由於Prometheus及相關的exporter會隨著版本發生變化,官方推薦都是最新的版本。這裡我為了保證後期文檔可用性,將mysqld_exporter和node_exporter都傳到我的倉庫中,下面有直接下載的方法

Docker Install

安裝docker版本使用19.06,使用腳本一鍵安裝

19.03版本需要最新的Linux 5.x內核支持,如果達不到升級的條件可以使用18.09的版本,具體參考docker官方文章

export VERSION=19.03
curl -fsSL "https://get.docker.com/" | bash -s -- --mirror Aliyun

所有機器配置加速源並配置docker的啟動參數使用systemd,使用systemd是官方的建議,詳見 https://kubernetes.io/docs/setup/cri/

mkdir -p /etc/docker/
cat>/etc/docker/daemon.json<<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
      "https://fz5yth0r.mirror.aliyuncs.com",
      "https://dockerhub.mirrors.nwafu.edu.cn/",
      "https://mirror.ccs.tencentyun.com",
      "https://docker.mirrors.ustc.edu.cn/",
      "https://reg-mirror.qiniu.com",
      "http://hub-mirror.c.163.com/",
      "https://registry.docker-cn.com"
  ],
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

啟動docker,檢查狀態是否正常

systemctl enable --now docker

查看docker info

[root@abcdocker ~]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 2
 Server Version: 19.03.11
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: systemd
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.6.7-1.el7.elrepo.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 3.846GiB
 Name: abcdocker
 ID: 7NVC:4GYW:CRGD:ABOX:V6T4:LYEH:MLLO:UUB3:X5ZB:QTRC:A2RW:DER4
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://hjvrgh7a.mirror.aliyuncs.com/
 Live Restore Enabled: false

node_exporter 安裝

node_exporter主要是用於監控宿主機的信息
項目地址https://github.com/prometheus/node_exporter

官方文檔提示: node_exporter設計用於監控主機系統。不建議將其部署為Docker容器,因為它需要訪問主機系統。請注意,您要監視的任何非根安裝點都需要綁定到容器中。如果啟動容器以進行主機監視,請指定path.rootfs參數。此參數必須與host root的bind-mount中的路徑匹配。node_exporter將path.rootfs用作訪問主機文件系統的前綴。

這裡我們就不以容器進行運行,使用二進位安裝的方式

官方下載地址https://prometheus.io/download/#node_exporter

#由於官方下載可能比較慢,我將壓縮包上傳到我的站點存儲,本次演示的版本為1.0.0
wget http://down.i4t.com/prometheus/node_exporter-1.0.0.linux-amd64.tar.gz
tar xf node_exporter-1.0.0.linux-amd64.tar.gz 
mkdir -p /usr/local/node_exporter
mv node_exporter /usr/local/node_exporter/node_exporter

創建systemd服務

#創建prometheus用戶
[root@abcdocker local]# useradd -s /sbin/nologin -m prometheus
[root@abcdocker local]# id prometheus
uid=1002(prometheus) gid=1002(prometheus) groups=1002(prometheus)

cat >>/etc/systemd/system/node_exporter.service<<EOF
[Unit]
Description=node_exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

啟動服務

在通過systemd啟動之前我們先測試一下node_exporter是否正常,直接./usr/local/node_exporter/node_exporter運行成功即可

[root@abcdocker ~]# cd /usr/local/node_exporter/
[root@abcdocker node_exporter]# ./node_exporter 
level=info ts=2020-06-08T15:56:43.206Z caller=node_exporter.go:177 msg="Starting node_exporter" 
level=info ts=2020-06-08T15:56:43.207Z caller=node_exporter.go:112 collector=zfs
...
...
...
level=info ts=2020-06-08T15:56:43.207Z caller=node_exporter.go:191 msg="Listening on" address=:9100
level=info ts=2020-06-08T15:56:43.207Z caller=tls_config.go:170 msg="TLS is disabled and it cannot be enabled on the fly." http2=false

#直接執行沒有問題,我們可以訪問測一下。 需要單獨在開通一個窗口進行curl,測試完畢以後通過ctrl -c結束node_exporter進程
[root@abcdocker node_exporter]# curl localhost:9100/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
...
go_memstats_alloc_bytes 1.256328e+06
#這裡只要有數據即可

上面是執行二進位node_exporter是否異常,接下來我們就退出啟動。通過systemd進行管理

systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter

#溫馨提示: 需要退出剛剛啟動的進程,否則啟動失敗

到現在我們的node_exporter二進位已經安裝完畢,如果想使用的可以使用下面的命令

docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter \
  --path.rootfs=/host

#這裡的命令為官方提供,官方建議使用二進位,docker安裝參數查閱官方文檔即可
https://github.com/prometheus/node_exporter/

mysqld_exporter安裝

項目地址:https://github.com/prometheus/mysqld_exporter

目前mysqld_exporter支持的版本為

MySQL> = 5.6

MariaDB> = 10.1

為了方便管理,這裡mysqld_exporter就是用docker進行運行,如果是使用二進位安裝參數基本上相同

這裡先到mysql授權mysqld_exporter用戶,mysqld_exporter實際上是通過select 查看mysql狀態獲取metric

#登錄mysql創建mysqld_exporter用戶,docker安裝就不要使用localhost
CREATE USER 'exporter'@'10.26.33.104' IDENTIFIED BY 'abcdocker..' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'10.26.33.104';
FLUSH PRIVILEGES;

#查看exporter信息
MySQL [(none)]> select user,host from mysql.user;
++-+
| user          | host      |
++-+
| root          | 127.0.0.1 |
| exporter      | 10.26.33.104 |
++-+
9 rows in set (0.00 sec)

創建mysqld_exporter容器

docker run -d \
  --net="host" \
  --name mysqld_exporter \
  -e DATA_SOURCE_NAME="exporter:abcdocker..@(10.26.33.104:3306)/" \
  registry.cn-beijing.aliyuncs.com/abcdocker/mysqld_exporter:0.12.1

DATA_SOURCE_NAME exporter代表用戶名:abcdocker代表密碼(xxxx:3306 mysql授權地址)

查看容器啟動狀態

[root@abcdocker ~]# docker ps
CONTAINER ID        IMAGE                                                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
e7ba8c43597e        registry.cn-beijing.aliyuncs.com/abcdocker/mysqld_exporter:0.12.1   "/bin/mysqld_exporter"   19 seconds ago      Up 18 seconds       0.0.0.0:9104->9104/tcp   nervous_tesla

#這裡我們看到已經獲取到metric
[root@abcdocker ~]# curl 10.26.33.104:9104/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0

Prometheus Install

prometheus我們也安裝在容器中

首先創建prometheus數據存儲目錄

[root@abcdocker ~]# mkdir /data/prometheus -p

#授權prometheus寫入數據
[root@abcdocker ~]# chmod -R 777 /data/prometheus

接下來編輯prometheus配置文件

mkdir -p /etc/prometheus
cat >>/etc/prometheus/prometheus.yml <<EOF
global:
  scrape_interval:     20s   #表示prometheus抓取指標數據的頻率,默認是15s,我們可以覆蓋這個值
  evaluation_interval: 20s   #用來控制評估規則的頻率,prometheus使用規則產生新的時間序列數據或者產生警報

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['10.26.33.104:9090']  #mertics接口地址,相當於exporter地址
        labels:
          instance: prometheus
  - job_name: linux                #任務名稱
    static_configs:
      - targets: ['10.26.33.104:9100']
        labels:
          instance: localhost  
  - job_name: mysql
    static_configs:
      - targets: ['10.26.33.104:9104']
        labels:
          instance: localhost:3306
EOF


#targets的地址建議寫內網IP,寫localhost因為容器不通,localhost會讓prometheus以為是自己的埠,造成不通信的問題

創建prometheus容器

docker run -d \
  -p 9090:9090 \
  --restart=always \
  --name prometheus \
  -v /data/prometheus:/data/prometheus \
  -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  registry.cn-beijing.aliyuncs.com/abcdocker/prometheus:v2.18.1 \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \      #數據存儲目錄
  --web.enable-admin-api \          #動態更新
  --web.enable-lifecycle \ 
  --storage.tsdb.retention.time=30d   #數據保留天數

查看prometheus容器狀態

[root@abcdocker ~]# docker ps
CONTAINER ID        IMAGE                                                           COMMAND                  CREATED              STATUS              PORTS                    NAMES
08b7d3d2de18        registry.cn-beijing.aliyuncs.com/abcdocker/prometheus:v2.18.1   "/bin/prometheus --c…"   About a minute ago   Up 2 seconds        0.0.0.0:9090->9090/tcp   prometheus
e7ba8c43597e       registry.cn-beijing.aliyuncs.com/abcdocker/mysqld_exporter:0.12.1    "/bin/mysqld_exporter"   39 minutes ago       Up 39 minutes       0.0.0.0:9104->9104/tcp   nervous_tesla
[root@abcdocker ~]# docker logs 08b7d3d2de18

接下來我們就可以登錄到宿主機IP+9090查看prometheus web ui

image_1eaaedn57kou1s0g1p1a3k51mfc9.png-908.1kB

接下來我們點擊Graph可以查看到圖表

image_1eaaeeqtb1ok01f661heh181b1in5m.png-516.5kB

只要有數據寫入說明prometheus沒有問題,接下來就安裝grafana

Grafana

grafana 是一個可視化麵包,有著非常漂亮的圖片和布局展示,功能齊全的度量儀錶盤和圖形化編輯器,支持Graphite、Zabbix、InfluxDB、Prometheus、OpenTSDB、Elasticasearch等作為數據源,比Prometheus自帶的圖標展示功能強大很多,更加靈活,有豐富的插件

同樣grafana使用容器進行運行

mkdir -p /data/grafana-storage
chmod -R 777 /data/grafana-storage

docker run -d \
  -p 3000:3000 \
  --name=grafana \
  -v /data/grafana-storage:/var/lib/grafana \
  registry.cn-beijing.aliyuncs.com/abcdocker/grafana:7.0.3

啟動完畢後我們可以到宿主機IP+3000查看服務

默認用戶名: admin
默認密碼:  admin

image_1eaaflokfe1e1lm0732e9h6t13.png-1105.8kB

在啟動grafana的時候可以設置密碼,後面修改也可以的。

第一次登陸會提示我們修改密碼

image_1eaafodpg1ut110ra1e651b9r1h1e20.png-275.4kB

接下來配置prometheus源

image_1eaafovulkvhbgu6vs1unn1bi12d.png-1052.1kB

選擇添加prometheus源

image_1eaafpr944qghie13mjqjff7s37.png-514.6kB

這裡只需要添加一個prometheus的地址就可以了,同樣建議使用內網IP

image_1eaafq81b44jl2q1npq94e1hjd3k.png-408.4kB

接下來保存測試

image_1eaafr9isqd21hp411k61rmaghs41.png-303.2kB

連接正常後會有下面的截圖

image_1eaafs0ijjvt1b2e1efi11ug1d7l4e.png-511.9kB

接下來可以點擊BACK退出

image_1eaafsjmkd4l12ugen1emo17tv4r.png-254.3kB

接下來可以添加監控圖片,如果想自定義圖片可以使用下面的方法,點擊創建圖片即可

image_1eaaftul1jl1ce21ibb8gordq5l.png-1104.6kB

另外一種比較受歡迎的就是導入模板

image_1eaafv33kq421n3d1q031is8qt62.png-924.1kB

接下來可以到grafana官網找合適的監控項
插件地址https://grafana.com/dashboards/

我們需要找到以下模板

node_exporter監控模板

mysqld_exporter監控模板

node_exporter監控模板使用最新的中文監控https://grafana.com/grafana/dashboards/8919
mysqld_exporter監控模板使用 https://grafana.com/grafana/dashboards/10101

這裡導入node_exporter模板

這裡可以屬於上面整個url,或者直接輸入後面ID都可以

image_1eaah0fp61lkk1e8h1b641p113136f.png-224kB

數據源選擇我們創建的,prometheus-1

image_1eaah1ifdoba1su41driggb1msv6s.png-600.9kB

導入完成後會出現下面的截圖

image_1eaah28ol5g019nk1gai1scn153u79.png-1406.1kB

node_exporter到這裡監控完畢

相同方法導入mysqld_exporter
mysqld_exporter監控模板使用 https://grafana.com/grafana/dashboards/10101

image_1eaakg2665c111c1kom8hu1p5m7m.png-812.7kB

目前是監控項添加完畢,後面是添加alertmanager告警

原文:https://i4t.com/4741.html

相關焦點

  • Prometheus(普羅米修斯)——適合k8s和docker的監控系統
    介紹Prometheus(普羅米修斯)是一套開源的監控&報警&時間序列資料庫的組合.由SoundCloud公司開發。Prometheus基本原理是通過HTTP協議周期性抓取被監控組件的狀態,這樣做的好處是任意組件只要提供HTTP接口就可以接入監控系統,不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環境比如VM或者Docker 。Prometheus應該是為數不多的適合Docker、Mesos、Kubernetes環境的監控系統之一。
  • 監控工具之Prometheus普羅米修斯,搭建和使用
    一、簡介1.1 prometheus監控框架工具介紹prometheus是由谷歌研發的一款開源的監控軟體,它通過安裝在遠程機器上的exporter,通過HTTP協議從遠程的機器收集數據並存儲在本地的時序資料庫上。
  • Prometheus Operator 監控ETCD集群
    Prometheus Opeartor 監控ETCD集群Kubernetes除了prometheus operator自帶的資源對象,節點以及組件監控,有的時候實際的業務場景需要我們自定義監控項確保有metric數據
  • 使用Prometheus、Grafana監控Artifactory實踐
    在企業的系統平臺上運行artifactory可能每天有上百萬個製品在不斷流轉,隨著研發團隊不斷擴大,用戶慢慢增多,並發量也相應的逐漸增大,在保證高可用的同時,我們對artifactory所在系統及應用服務進行監控會顯得尤其重要。那麼如何實現系統及應用的監控呢?
  • CentOS7下簡單搭建Prometheus+Grafana監控系統
    下面介紹CentOS7下簡單搭建Prometheus+Grafana監控系統1、先官網下載安裝包https://prometheus.io/download/1)prometheus服務端groupadd prometheususeradd -g prometheus -m -d /opt/prometheus/ -s /sbin/nologin prometheustar -zxf /data/prometheus-2.17.2.linux-amd64
  • 聊聊下一代監控:Prometheus
    在不依賴外部存儲的情況下,支持伺服器節點的本地存儲,通過 Prometheus 自帶的時序資料庫,可以完成每秒千萬級的數據存儲;不僅如此,在保存大量歷史數據的場景中,Prometheus 可以對接第三方時序資料庫和 OpenTSDB 等。
  • 使用 Thanos 實現 Prometheus 的高可用
    取模的方式可以確保當前 Prometheus 只採集當前任務的一部分實例的監控指標。: prometheus volumes: - name: prometheus-config configMap: name: prometheus-config - name: prometheus-rules configMap:
  • Prometheus+InfluxDB+Grafana 打造高逼格監控平臺
    前面我們提到過,在性能監控圖譜中,有作業系統、應用伺服器、中間件、隊列、緩存、資料庫、網絡、前端、負載均衡、Web 伺服器、存儲、代碼等很多需要監控的點。顯然這些監控點不能在一個專欄中全部覆蓋並一一細化,我只能找最常用的幾個,做些邏輯思路的說明,同時也把具體的實現描述出來。如果你遇到了其他的組件,也需要一一實現這些監控。在本篇中,主要想說明白下圖的這個監控邏輯。
  • 玩轉Prometheus必備技能:PromQL 使用基礎
    Prometheus 會將所有採集到的樣本數據以時間序列的方式保存在內存資料庫中,並且定時保存到硬碟上。時間序列是按照時間戳和值的序列順序存放的,我們稱之為向量(vector),每條時間序列通過指標名稱(metrics name)和一組標籤集(labelset)命名。
  • 基於 RocketMQ Prometheus Exporter 打造定製化 DevOps 平臺
    RocketMQ 雲原生系列文章:RocketMQ-Exporter 項目的 GitHub 地址:https://github.com/apache/rocketmq-exporterRocketMQ-Exporter 的監控指標和告警指標
  • Prometheus+Grafana+Alertmanager實現告警推送教程圖文詳解
    Prometheus Server可以通過靜態配置管理監控目標,也可以配合使用Service Discovery的方式動態管理監控目標,並從這些監控目標中獲取數據。其次Prometheus Server需要對採集到的監控數據進行存儲,Prometheus Server本身就是一個時序資料庫,將採集到的監控數據按照時間序列的方式存儲在本地磁碟當中。
  • 小白也能輕鬆上手的Prometheus教程
    我們來詳細看看prometheus-server和prometheus-alertmanager。我們從第一個開始並理解其配置,我們如何編輯它並了解服務在哪個埠上運行。點擊垂直省略號菜單按鈕並點擊View/Edit YAML。
  • Prometheus+Grafana+Alertmanager實現告警推送教程——圖文詳解
    Prometheus Server可以通過靜態配置管理監控目標,也可以配合使用Service Discovery的方式動態管理監控目標,並從這些監控目標中獲取數據。其次Prometheus Server需要對採集到的監控數據進行存儲,Prometheus Server本身就是一個時序資料庫,將採集到的監控數據按照時間序列的方式存儲在本地磁碟當中。
  • Prometheus 監控領域最鋒利的「瑞士軍刀」
    —Prometheus1、簡介Prometheus是由SoundCloud開發的開源監控告警系統並且帶時序資料庫,基於Go語言,是Google BorgMon監控系統的開源版本。Prometheus支持兩種方式:第1種是通過配置文件、文本文件等進行靜態配置;第2種是支持ZooKeeper、Consul、Kubernetes等方式進行動態發現,例如對於Kubernetes的動態發現,Prometheus使用Kubernetes的API查詢和監控容器信息的變化,動態更新監控對象,這樣容器的創建和刪除就都可以被Prometheus感知。
  • 揭秘Prometheus時序資料庫設計
    時序數據      Prometheus隨時間採集監控數據點,每個數據點都是時間戳和值的元組。出於監控的目的,時間戳是一個整數,值是任意數字--64位浮點數對於Counter和Gauge類型來說都是一個很好的表示方式。按時間戳嚴格單調遞增的數據點序列是一個由標識符尋址的Series。
  • 使用golang編寫自定義prometheus metrics
    二、環境組件版本備註k8sv1.14ovsv2.9.5go1.14.1三、目標目標就是要通過prometheus去拉取我的ovs bond的網卡狀態指標,那麼這裡我需要編寫一個go程序去獲取我主機的ovs bond信息,並最終以metrics方式暴露供prometheus來拉取,在grafana上展示。
  • Kubernetes 實戰教學,手把手教您用 Helm 在 K8s 平臺上部署 Prometheus
    1s ==> v1/ServiceAccountexcited-elk-prometheus-alertmanager        1sexcited-elk-prometheus-kube-state-metrics  1sexcited-elk-prometheus-node-exporter
  • MySQL 刪除資料庫 | Mysql Drop Database
    在刪除資料庫過程中,務必要十分謹慎,因為在執行刪除命令後,所有數據將會消失。drop 命令刪除資料庫mysql> drop database RUNOON;使用 mysqladmin 刪除資料庫你也可以使用 mysql mysqladmin 命令在終端來執行刪除命令。
  • Mac電腦性能監控
    所以想監控一下這臺電腦的性能情況,做一些調整.因為平時是使用這臺電腦基本上是用ssh登錄,而且想實時關注性能數據.大概能想到兩個方案, 1、獲取當前機器的內存和CPU數據,定時發送消息 2、搭建一個簡單的性能監控平臺性能腳本#!