俗话说,没有监控的系统就是在裸奔,好的监控就是运维人员的第三只手,第三只眼。本文将使用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
其余若是须要其余监控项也能够自定义添加