一、概述:
prometheus+grafana 是一组很流行的监控程序,主要为 docker 为云环境而生,配合 K8S 可以轻松实现企业级的监控。这次搭建一半是为了练手,更多的学习 linux 和 docker 的知识;一半也希望进行一次实践,将搭建好的程序用于生产环境。
二、对比一些常见的监控平台
对比就不得不提鼎鼎有名的 ZABBIX 这个非常著名的监控程序了,ZABBIX 出现得很早,在物理机的监控上非常有优势,经过多年的发展也拓展到能监控应用程序了,例如监控 数据库 nginx等等。
但是:
虽然出现的早,但毕竟是二代服务器环境时代的产物,我给的印象就是老,这个程序太老了,不符合我的择偶标准,我都是喜新厌旧的。现在大规模的云环境下,应运而生的监控平台 prometheus 应该更符合潮流,prometheus 完全开源,所以发展非常的快,虽然出发点是为了监控云环境,但是在监控基础环境下一点也不差,反而因为用更现代化的 go 语言开发,使得程序小而流畅,总之它就是非常好!!(文笔有限)
三、prometheus+grafana架构
prometheus server :主程序,主要通过 http 协议抓取各种数据 (zabbix主要采用node推送的方式获取数据)
Pushgeteway:临时网关,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
jobs/exporters :部署在客户端的程序,go语言开发非常轻量,由于采用server抓取的形式,所以对客户机的影响非常小
Alertmanager :收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
grafana :第三方前端展示界面,提供非常绚丽的前端渲染(prometheus 本身只有简单的监控界面)
prometheus 采用自开发的 PromQL ,用于对抓取到的数据对外展现和查询,相比 mysql 查询方式更简单高效;
prometheus和grafana都自带web界面,无需依赖 PHP nginx等环境
四、部署过程
环境
server:192.168.10.1 (安装prometheus:9090+grafana:3000)
node:192.168.10.2 (安装node_exporter:9100)
OS:Centos 7 x64
默认关闭防火墙,selinux
1.server上安装prometheus
官方推荐 docker 安装,如果对 docker 比较熟练倒是非常推荐,我还是个菜鸡,就用官方提供的二进制安装
参考 官方安装文档
#从官方github拉取安装包
mkdir data
cd data
wget https://github.com/prometheus/prometheus/releases/download/v2.7.1/prometheus-2.7.1.linux-amd64.tar.gz
tar zxvf prometheus-2.7.1.linux-amd64.tar.gz prometheus
cd prometheus
#后台运行prometheus
nohup ./prometheus &
#创建 prometheus 用户并将程序写入systemd服务
cd ..
sudo groupadd prometheus
sudo useradd -g prometheus -m -d /data/prometheus -s /sbin/nologin prometheus
sudo chown -R prometheus:prometheus /data/prometheus
sudo vim /etc/systemd/system/prometheus.service
#写入以下内容
[Unit]
Description=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/data/prometheus/prometheus --config.file=/data/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target
访问http://ip:9090(prometheus自带的一个简单web界面)
主要配置
2.server安装grafana
参考 官方安装文档
仍然建议用 docker 安装,这里用 rpm 包安装
wget https://dl.grafana.com/oss/release/grafana-6.0.0-1.x86_64.rpm
sudo yum localinstall grafana-6.0.0-1.x86_64.rpm
启动 grafana 程序
$ systemctl daemon-reload
$ systemctl start grafana-server
访问:http://ip:3000 (默认用户名/密码:admin/admin)
2.1配置启用systemd服务时以启动grafana
sudo systemctl enable grafana-server.service
2.2如果图像显示文字不全,安装字体包解决:
yum install fontconfig
yum install freetype*
yum install urw-fonts
2.3备注:
- 默认数据库位置:/var/lib/grafana/grafana.db (默认为sqlite3,可更改为mysql或Postgres)
- 默认配置使用日志文件
/var/log/grafana/grafana.log
3.node(192.168.10.2)安装node_exporter程序
mkdir data
cd data
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar zxvf node_exporter-0.17.0.linux-amd64.tar.gz node_exporter
rm node_exporter-0.17.0.linux-amd64.tar.gz
cd node_exporter
nohup /data/node_exporter/node_exporter &
#创建node_exporter用户并将node_exporter程序写入systemd服务
sudo groupadd node_exporter
sudo useradd -g node_exporter -m -d /data/node_exporter -s /sbin/nologin node_exporter
sudo chown -R node_exporter:node_exporter /data/node_exporter
sudo vim /etc/systemd/system/node_exporter.service
#写入以下配置
[Unit]
Description=Node_exporter
DefaultDependencies=no
[Service]
Type=simple
User=node_exporter
RemainAfterExit=yes
ExecStart=/data/node_exporter/node_exporter --collector.textfile.directory=/data/node_exporter/ --web.listen-address=:9100
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl start node_exporter.service
sudo systemctl enable node_exporter.service
4.集成node_exporter+prometheus server+grafana
4.1在server端配置监控节点
vim /data/prometheus/prometheus.yml
#添加如下配置
# 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: ['127.0.0.1:9090']
- job_name: 'test'
# metrics_path defaults to '/metrics'
#scheme defaults to 'http'.
static_configs:
- targets: ['192.168.10.2:9100']
labels:
instance: server1
4.2访问 http://192.168.10.1:9090 界面如下
4.2grafana添加数据源
访问 http://192.168.10.1:3000 (admin/admin)
选择添加 DataSource 选择 prometheus 类型
如图所示添加数据源服务器
4.3数据视图
我比较懒,懒得一个一个去写规则构建视图了,我需要的监控主要是cpu内存等基础,所以直接摸了一个网上现成的模板:
只需要记住模板的 ID 号填入 grafana 的 dashboards 里面即可
http://IP:9090 Not https://IP:9090
感谢指出,以更正;本以为小破站没人看,写给自己做个存档,看来还是抽空认真整理一下的好。