站点图标 Linux-技术共享

VPS监控系统,Prometheus+Grafana搭建方案

随着迷恋上各种服务自建,买了几台vps,配置都很低,动不动就出问题,等到使用的时候才发现服务坏掉了,我意识到一个监控服务是必须的。linux监控服务使用过监控宝,后来是nagios,zabbix。但是这两个东西的界面都非常简陋,甚至有些丑。直到一个群友给我推荐了Prometheus+Grafana:

Grafana是什么

Grafana是一跨平台的开源的可视化分析工具,目前网络架构和应用分析中最流行的时序数据展示工具,主要用于 大规模指标数据的可视化展示。 快速灵活、易用性强的客户端图表,丰富的仪表盘插件,让复杂的数据更加直观。

简单来说,grafana是一个界面,数据通过api接口读取展示

这里用的数据源是Prometheus,当然,其他的监控工具也可以使用grafana作为界面使用,但是相对来说prometheus占用资源更少

Prometheus 是什么

现在最常见的 Docker、Mesos、Kubernetes 容器管理系统中,通常会搭配 Prometheus 进行监控。 

Prometheus [prəˈmiθju:s] 普罗米修斯 Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化环境比如 VM 或者 Docker 。

输出被监控组件信息的 HTTP 接口被叫做 exporter。

目前互联网公司常用的组件大部分都有 exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。 

exporter ([ekˈspɔ:tə(r)] 出口商)对比主流的监控工具的操作界面:nagios 监控界面:

zabbix 监控界面

通过上面的界面,我们可以看出来 Grafana+Prometheus 展示界面更美观 1.1.2 Prometheus 架构图解普罗米修斯(Prometheus)及其一些生态系统组件的整体架构:

搭建过程

主服务器安装Prometheus+Grafana

操作系统:Centos7.6

安装Prometheus 

Prometheus 项目主页:https://github.com/prometheus/prometheus/

根据自己的操作系统选择合适的包

# 查看操作系统版本
cat /etc/os-release 

#NAME="CentOS Linux"
#VERSION="7 (Core)"

yum update
yum install wget

# 下载prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.40.2/prometheus-2.40.2.linux-amd64.tar.gz
tar zxf prometheus-2.40.2.linux-amd64.tar.gz -C /opt
mv /opt/prometheus-2.40.2.linux-amd64 /opt/prometheus

配置开机启动

vim /usr/lib/systemd/system/prometheus.service
# content #
[Unit]
Description=prometheus service
 
[Service]
User=root
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data
 
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target

启动服务

systemctl daemon-reload
systemctl enable prometheus --now
systemctl status prometheus

开启防火墙端口9090

# 如果防火墙未开启就不用打开端口了#
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload

浏览器里访问 http://ip:9090

安装Grafana

设置官方源

vim /etc/yum.repos.d/grafana.repo

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

如果是国内服务器最好是设置中文源

vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm
repo_gpgcheck=0
enabled=1
gpgcheck=0

安装

yum makecache -y
yum install grafana -y
systemctl daemon-reload
systemctl enable grafana-server --now
systemctl status grafana-server

开启防火墙端口3000

# 如果防火墙未开启就不用打开端口了#
firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --reload

浏览器里访问 http://ip:3000

默认用户名密码都是admin,初次登录会要求修改默认的登录密码:

Grafana
Grafana

添加Prometheus数据源

点击主界面的“Add your first data source”并选择Prometheus:

Prometheus+Grafana

Dashboards页面选择“Prometheus 2.0 Stats”进行Import:

Settings页面填写普罗米修斯地址并保存:

切换到我们刚才添加的“Prometheus 2.0 Stats”即可看到整个监控页面:

安装配置 node_exporter

这是被监控端需要安装的,因为主服务器本身也要监控,所以也要安装

项目主页:https://github.com/prometheus/node_exporter

wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
tar xf node_exporter-1.4.0.linux-amd64.tar.gz -C /opt/

mv /opt/node_exporter-1.4.0.linux-amd64/ /opt/node_exporter

创建 node_exporter 系统服务启动文件

vim /usr/lib/systemd/system/node_exporter.service

#Prometheus Node Exporter Upstart script
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=root
ExecStart=/opt/node_exporter/node_exporter

[Install]
WantedBy=default.target

启动node_exporter

systemctl daemon-reload
systemctl enable node_exporter --now
systemctl status node_exporter
# 服务启动后可以用 http://localhost:9100/metrics 
# 如果防火墙未开启就不用打开端口了#
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --reload

浏览器里访问 http://ip:9100/metrics 测试 node_exporter 是否获取到节点的监控指标。

Prometheus配置文件添加监控项:

vim /opt/prometheus/prometheus.yml

# 务必注意格式,多少个空格就是多少个空格,不然会报错。

  - job_name: 'linux-master'
    static_configs:
    - targets: ['localhost:9100']
      labels:
        instance: linux-master

重启prometheus

systemctl reload prometheus.service

回到Grafana的主界面,grafana导入画好的dashboard:

下载json文件:https://picture-bed-iuskye.oss-cn-beijing.aliyuncs.com/prometheus/node-exporter_rev5.json

其他的exporter:

https://cloud.tencent.com/document/product/1416/56041

 

修改名字,选择我们前文创建好的数据源,点击导入即可:

下面这个提示是grafana缺少相关显示需要用到的插件piechart,grafana的默认插件目录是/var/lib/grafana/plugins,可以将下载好的插件解压到这个目录,重启grafana即可

安装插件

grafana-cli plugins install grafana-piechart-panel
grafana-cli plugins install digiapulssi-breadcrumb-panel
grafana-cli plugins install grafana-polystat-panel
 
systemctl restart grafana-server

查看已安装插件:

/usr/sbin/grafana-cli plugins ls
installed plugins:
grafana-piechart-panel @ 1.3.3

再刷新grafana页面,即可看到我们刚才设置好的node监控:

被监控主机:

其他被监控vps只需要安装node_exporter

打开防火墙,允许服务器访问Prometheus 端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="Pro主机的ip" port protocol="tcp" port="9090" accept"
firewall-cmd --reload

去grafana添加数据源

同上

报警设置

邮箱告警

ttelegram告警

退出移动版