俗話說,沒有監控的系統就是在裸奔,好的監控就是運維人員的第三隻手,第三隻眼。本文將使用prometheus及Grafana搭建一套監控系統來監控主機及數據庫(MySQL、Redis)。node
1. 安裝Grafanamysql
Grafana是一個可視化面板(Dashboard),有着很是漂亮的圖表和佈局展現,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus等數據源。linux
1.1 下載並安裝git
下載地址:https://grafana.com/grafana/downloadgithub
選擇最新的版本進行安裝,按照網站的提示運行腳本便可(監控服務器需可訪問外網,如沒法訪問外網可與我溝通如何離線快速部署)。web
運行以下腳本redis
wget https://dl.grafana.com/oss/release/grafana-6.3.3-1.x86_64.rpm sudo yum localinstall grafana-6.3.3-1.x86_64.rpm
1.2 啓動grafanasql
安裝完成後,grafana服務默認已安裝,配置文件爲/etc/grafana/grafana.ini,如需修改路徑及端口,可在該文件中修改數據庫
啓動grafanavim
/etc/init.d/grafana-server start
1.3 登陸grafana
訪問頁面http://服務器IP:3000 ,默認帳號、密碼admin/admin 首次登陸將提示修改密碼,建議修改
2. 安裝Prometheus
2.1 Prometheus 主程序安裝
Prometheus 主程序,主要是負責存儲、抓取、聚合、查詢方面
可登陸官網進行下載,官網下載地址:https://prometheus.io/download/
根據操做系統類別選擇文件進行下載,本次部署在linux上
/** 下載*/ wget https://github.com/prometheus/prometheus/releases/download/v2.12.0/prometheus-2.12.0.linux-amd64.tar.gz /** 解壓*/ tar -zxvf prometheus-2.12.0.linux-amd64.tar.gz
2.2 啓動prometheus主程序
生產環境可參考以下方式啓動
/** 生產環境啓動*/ nohup ./prometheus --config.file=prometheus.yml --web.enable-lifecycle --storage.tsdb.retention.time=60d & /** --web.enable-lifecycle 加上此參數能夠遠程熱加載配置文件,無需重啓prometheus,調用指令是curl -X POST http://ip:9090/-/reload -- storage.tsdb.retention.time 數據默認保存時間爲15天,啓動時加上此參數能夠控制數據保存時間 */
其餘的參數及配置能夠在prometheus.yml中調整及配置
3. 在需監控的機器上部署exporter
3.1 監控linux主機
下載監控linux主機的node_exporter,依舊從官網下載
/** 下載 */ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz /** 解壓 */ tar -zxvf node_exporter-0.18.1.linux-amd64.tar.gz
能夠按照默認方式啓動
/** 啓動 node_exporter*/ cd node_exporter-0.18.1.linux-amd64 nohup ./node_exporter & /** 默認端口9100 */
3.2 監控MySQL
3.2.1 下載
下載監控MySQL的mysqld_exporter,依舊從官網下載
/** 下載 */ wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz /** 解壓 */ tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
3.2.2 監控帳號及修改文件配置
在MySQL裏配置MySQL監控帳號
/** 建立帳號 */ mysql> CREATE USER 'mysql_monitor'@'localhost' identified by 'mysql_monitor'; /** 受權 */ mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysql_monitor'@'localhost'; mysql> GRANT SELECT ON performance_schema.* TO 'mysql_monitor'@'localhost'; /** 注意,不用版本對權限要求不一致,啓動時注意查看日誌,如權限不足則繼續受權或建立對應的帳號 */
配置文件修改
cd mysqld_exporter-0.12.0.linux-amd64 vim .my.cnf /** 添加以下配置 */ [client] port=3306 user=mysql_monitor password=mysql_monitor
3.2.3 啓動監控腳本
nohup ./mysqld_exporter --config.my-cnf=.my.cnf &
3.3 監控redis
3.3.1 下載redis_exporter
官網上沒有redis_exporter, 能夠從github上獲取,另外redis插件無需放在redis機器上也能夠
/** 下載 */ wget https://github.com/oliver006/redis_exporter/releases/download/v0.30.0/redis_exporter-v0.30.0.linux-amd64.tar.gz /** 解壓 */ tar -zxvf redis_exporter-v0.30.0.linux-amd64.tar.gz
3.3.2 啓動redis_exporter
/** redis無密碼 */ nohup ./redis_exporter -redis.addr=192.168.56.118:6379 -web.listen-address 0.0.0.0:9121 & /** redis有密碼 */ nohup ./redis_exporter -redis.addr=192.168.56.118:6479 -redis.password 123456 -web.listen-address 0.0.0.0:9122 & /** -web.listen-address 能夠自定義監控端口 */
4. 配置prometheus配置文件
4.1 添加各監控項
配置文件能夠有多種配置方式,能夠根據不一樣的分類和習慣配置。可參考以下方式配置
# my global config 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: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'OS' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['192.168.56.114:9100'] labels: instance: '192.168.56.114' - targets: ['192.168.56.116:9100'] labels: instance: '192.168.56.116' - targets: ['192.168.56.117:9100'] labels: instance: '192.168.56.117' ## 上述job單獨作主機監控,每臺主機的instance不一樣 - job_name: 'mysql' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['192.168.56.116:9104'] labels: instance: '192.168.56.116' - targets: ['192.168.56.117:9104'] labels: instance: '192.168.56.117' ## 以上是監控mysql的,instance和主機的instance的相同 - job_name: 'redis' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['192.168.56.118:9121','192.168.56.118:9122'] labels: instance: '192.168.56.118' - targets: ['192.168.56.118:9100'] labels: instance: '192.168.56.118' # 能夠相似上述這種,redis的主機及各redis監控項組合在一塊兒,instance使用相同的
4.2 啓動或熱加載prometheus
/** 啓動 */ nohup ./prometheus --config.file=prometheus.yml --web.enable-lifecycle --storage.tsdb.retention.time=60d & /** -- storage.tsdb.retention.time 數據默認保存時間爲15天,啓動時加上此參數能夠控制數據保存時間 */ /** 熱加載 */ curl -X POST http://ip:9090/-/reload /** 熱加載的前提是啓動時加了--web.enable-lifecycle */
5. 配置各監控儀表盤
5.1 下載各監控儀表盤
以上模板grafana官方網站均有,能夠根據本身的須要下載對應的模板,對應地址爲https://grafana.com/grafana/dashboards
找到對應的儀表盤模板後進入下載
5.2 配置數據源
本次使用的均爲prometheus數據源,所以配置一個prometheus的數據源
若是以前在grafana上沒有配置過數據源 登陸後會提示建立
選擇prometheus
配置prometheus地址
最終save & Test便可
5.3 導入儀表盤
將5.1中下載的模板導入
導入
修更名稱及數據源
import便可
5.4 配置完成後便可查看各監控狀況
主機監控以下
MySQL
Redis
其餘若是須要其餘監控項也能夠自定義添加