Prometheus 監控MySQL資料庫

2020-12-23 abcdocker運維博客

Prometheus 監控mysql容器

Prometheus

這裡我們演示中,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.03curl -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 infoClient:DebugMode:falseServer:Containers:1Running:0Paused:0Stopped:1Images:2ServerVersion:19.03.11StorageDriver: overlay2BackingFilesystem: extfsSupports d_type:trueNativeOverlayDiff:trueLoggingDriver: json-fileCgroupDriver: systemdPlugins:Volume:localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: runcDefaultRuntime: runcInitBinary: docker-init containerd version:7ad184331fa3e55e52b890ea95e65ba581ae3429 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd init version: fec3683SecurityOptions: seccompProfile:defaultKernelVersion:5.6.7-1.el7.elrepo.x86_64OperatingSystem:CentOSLinux7(Core)OSType: linuxArchitecture: x86_64CPUs:1TotalMemory:3.846GiBName: abcdocker ID:7NVC:4GYW:CRGD:ABOX:V6T4:LYEH:MLLO:UUB3:X5ZB:QTRC:A2RW:DER4DockerRootDir:/var/lib/dockerDebugMode:falseRegistry: https://index.docker.io/v1/Labels:Experimental:falseInsecureRegistries:127.0.0.0/8RegistryMirrors: https://hjvrgh7a.mirror.aliyuncs.com/LiveRestoreEnabled:falsenode_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.0wget http://down.i4t.com/prometheus/node_exporter-1.0.0.linux-amd64.tar.gztar xf node_exporter-1.0.0.linux-amd64.tar.gz mkdir -p /usr/local/node_exportermv node_exporter /usr/local/node_exporter/node_exporter創建systemd服務

#創建prometheus用戶[root@abcdocker local]# useradd -s /sbin/nologin -m prometheus[root@abcdocker local]# id prometheusuid=1002(prometheus) gid=1002(prometheus) groups=1002(prometheus)cat >>/etc/systemd/system/node_exporter.service<<EOF[Unit]Description=node_exporterAfter=network.target[Service]Type=simpleUser=prometheusExecStart=/usr/local/node_exporter/node_exporterRestart=on-failure[Install]WantedBy=multi-user.targetEOF啟動服務

在通過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.206Zcaller=node_exporter.go:177 msg="Starting node_exporter"level=info ts=2020-06-08T15:56:43.207Zcaller=node_exporter.go:112 collector=zfs.........level=info ts=2020-06-08T15:56:43.207Zcaller=node_exporter.go:191 msg="Listening on" address=:9100level=info ts=2020-06-08T15:56:43.207Zcaller=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 summarygo_gc_duration_seconds{quantile="0"}0...go_memstats_alloc_bytes 1.256328e+06#這裡只要有數據即可上面是執行二進位node_exporter是否異常,接下來我們就退出啟動。通過systemd進行管理

systemctl daemon-reloadsystemctl enable node_exportersystemctl start node_exportersystemctl 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.6MariaDB> = 10.1為了方便管理,這裡mysqld_exporter就是用docker進行運行,如果是使用二進位安裝參數基本上相同

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

#登錄mysql創建mysqld_exporter用戶,docker安裝就不要使用localhostCREATE 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 inset(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.1DATA_SOURCE_NAME exporter代表用戶名:abcdocker代表密碼(xxxx:3306 mysql授權地址)查看容器啟動狀態

[root@abcdocker ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe7ba8c43597e registry.cn-beijing.aliyuncs.com/abcdocker/mysqld_exporter:0.12.1"/bin/mysqld_exporter"19 seconds ago Up18 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 summarygo_gc_duration_seconds{quantile="0"}0go_gc_duration_seconds{quantile="0.25"}0go_gc_duration_seconds{quantile="0.5"}0go_gc_duration_seconds{quantile="0.75"}0Prometheus Install

prometheus我們也安裝在容器中

首先創建prometheus數據存儲目錄

[root@abcdocker ~]# mkdir /data/prometheus -p#授權prometheus寫入數據[root@abcdocker ~]# chmod -R 777/data/prometheus接下來編輯prometheus配置文件

mkdir -p /etc/prometheuscat >>/etc/prometheus/prometheus.yml <<EOFglobal: 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:3306EOF#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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES08b7d3d2de18 registry.cn-beijing.aliyuncs.com/abcdocker/prometheus:v2.18.1"/bin/prometheus --c…"About a minute ago Up2 seconds 0.0.0.0:9090->9090/tcp prometheuse7ba8c43597e registry.cn-beijing.aliyuncs.com/abcdocker/mysqld_exporter:0.12.1"/bin/mysqld_exporter"39 minutes ago Up39 minutes 0.0.0.0:9104->9104/tcp nervous_tesla[root@abcdocker ~]# docker logs 08b7d3d2de18接下來我們就可以登錄到宿主機IP+9090查看prometheus web ui

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

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

Grafana

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

同樣grafana使用容器進行運行

mkdir -p /data/grafana-storagechmod -R 777/data/grafana-storagedocker 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

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

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

接下來配置prometheus源

選擇添加prometheus源

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

接下來保存測試

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

接下來可以點擊BACK退出

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

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

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

我們需要找到以下模板

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

這裡導入node_exporter模板

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

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

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

node_exporter到這裡監控完畢

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

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

相關焦點

  • 監控工具之Prometheus普羅米修斯,搭建和使用
    一、簡介1.1 prometheus監控框架工具介紹prometheus是由谷歌研發的一款開源的監控軟體,它通過安裝在遠程機器上的exporter,通過HTTP協議從遠程的機器收集數據並存儲在本地的時序資料庫上。
  • Prometheus Operator 監控ETCD集群
    Prometheus Opeartor 監控ETCD集群Kubernetes除了prometheus operator自帶的資源對象,節點以及組件監控,有的時候實際的業務場景需要我們自定義監控項確保有metric數據
  • Prometheus + Grafana 構建 Redis 實時監控平臺
    今天就和大家分享redis-exporter+grafana+prometheus構建Redis實時監控。由於在物理機中搭建redis-exporter+grafana+prometheus較為繁瑣,下面直接利用Docker來搭建這一套監控體系作為實例。不熟悉Docker也不要緊,這裡只是熟悉監控流程。
  • 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是新一代的監控系統解決方案,原生支持雲環境,和kubernetes無縫對接,的卻是容器化監控解決方案的不二之選。當然對傳統的監控方案也能夠兼容,通過自定義或是用開源社區提供的各種exporter無疑又為prometheus豐滿羽翼。
  • Prometheus+Grafana+Alertmanager實現告警推送教程——圖文詳解
    Prometheus Server可以通過靜態配置管理監控目標,也可以配合使用Service Discovery的方式動態管理監控目標,並從這些監控目標中獲取數據。其次Prometheus Server需要對採集到的監控數據進行存儲,Prometheus Server本身就是一個時序資料庫,將採集到的監控數據按照時間序列的方式存儲在本地磁碟當中。
  • 監控大規模Hadoop集群,Prometheus完勝Zabbix?
    面對如此規模龐大的集群,一套優秀的監控系統是運維人員發現及處理故障的關鍵利器。經過多次選型和迭代,筆者選擇了Prometheus,這款時下火熱而強大的開源監控組件為核心來構建大數據集群監控平臺。之所以選擇該組合作為平臺核心,是因為其具有以下幾點優勢:內置優秀的TSDB資料庫,可以輕鬆應對大數據量並發查詢,為運維人員提供關鍵指標; 強大的Promql,可以通過各類內置函數,獲取各維度搜索監控數據用於Grafana出圖; Prometheus基於Go語言開發,Go高效的運行效率,使其擁有天生的速度優勢; 活躍的Github社區,提供豐富的Client庫。
  • MySQL資料庫測試題
    MySQL資料庫入門1、假設要按照分頁(每頁顯示10條)的形式獲取test表中的數據,在MySql>資料庫中,以下哪條語句是取第2頁中的數據?test(資料庫名已經存在)中的表結構和數據?(難度A)A、在DOS提示符下輸入以下命令mysql -uroot -p1234 test<d:/db.sql B、在DOS提示符下輸入以下命令mysqldump -uroot -p1234 test<d:/db.sql
  • 資料庫基礎:mysql主從集群搭建
    還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的數據同時寫到備份的資料庫中。實現mysql資料庫的熱備份。 要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作為從資料庫的數據版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。
  • 每天一分鐘,python一點通(Python 連接資料庫mysql)
    mysql資料庫每天一分鐘,python一點通(workbench new table),且建立了一個資料庫表,該如何操作資料庫?  Python 連接資料庫mysql  在操作mysql資料庫前,請先安裝pymysql(pip install pymysql)  import pymysql.cursorsMYSQL_HOSTS='localhost' # 本地資料庫,若是伺服器上的資料庫,請輸入伺服器IPMYSQL_USER
  • MySQL分支資料庫MariaDB之CentOS安裝教程
    MariaDB資料庫管理系統是MySQL的一個分支,由MySQL的創始人Michael Widenius主持開發。採用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,在存儲引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。
  • MySQL 資料庫的哈希表-愛可生
    數組在各個開發語言以及資料庫中都有類似的結構,類似下圖1:圖 1 展示了一個一維整數數組,數組的長度為 10,下標從 0-9, 每個下標對應不同的值。每種程式語言基本上都有數組,大部分資料庫也提供了數組或者是類似數組的結構,MySQL 也有數組,以下為 MySQL 的一維數組:mysql> select @a as "array",json_length(@a) as "array_size";+---------------------------------
  • 一則MySQL慢日誌監控誤報的問題分析
    之前因為各種原因,有些報警沒有引起重視,最近放假馬上排除了一些潛在的人為原因,發現資料庫的慢日誌報警有些奇怪,主要表現是慢日誌報警不屬實,收到報警的即時通信提醒後,隔一會去資料庫裡面去排查,發現慢日誌的性能似乎沒有那麼差(我設置的一個閾值是60)。
  • 「詳細」MySQL資料庫與JDBC編程
    Class.forName("com.mysql.ch.hdbc.Driver");Class.forName("oracle.jdbc.driver.OracleDriver");2、通過DriverManager獲取資料庫連接DriverManager.getConnection("jdbc:mysql
  • Mysql資料庫的常用操作
    本文主要介紹mysql資料庫的查詢操作,捎帶腳增刪改操作。insert into:insert into table (欄位) values (數據)(數據)...insert into table values (數據)(數據)...
  • Mysql資料庫部分
    在筆試題最後一般都是有一道關於mysql語句的問題,讓手寫出增、刪、改、查語句,今天我們就學習一下mysql語句。通過存儲過程可以使沒有權限的用戶在控制之下間接地存取資料庫,從而保證數據的安全。通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。6. 增強安全性。a) 通過向用戶授予對存儲過程(而不是基於表)的訪問權限,它們可以提供對特定數據的訪問。
  • 資料庫基礎知識篇:MYSQL如何判斷某欄位是否包含某個字符串!
    在實際應用中,我們會遇到各種各樣的需求,這些需求都跟資料庫有著緊密的關係,在複雜的邏輯也只不過是增刪改查。其時,如果我們將資料庫中每一個欄位都看成是一個變量,即然是變量就可以運算,只要能運算,結果就是我們所需要的值。
  • MySQL授權管理與結構分層
    在資料庫操作過程,經常會遇到分配普通用戶權限問題,root權限是最高權限,本文講述了權限管理%';資料庫分層MySQL無密碼登錄關閉資料庫方法mysqladmin -uroot -p123 shutdown
  • 艾編程教程:Linux環境下MySQL安裝
    >useradd mysql2)mysql 目錄改為 mysql 讀寫權限chown -R mysql:mysql /var/lib/mysql --如果沒有目錄就建立一下chown -R mysql:mysql /usr/local/mysql