【DB宝36】使用Docker分分钟搭建漂亮的prometheus+grafana监控

目录
node

  • 1、部署Prometheus+grafana环境
    • 1.一、下载Prometheus+grafana镜像
    • 1.二、建立镜像
    • 1.三、浏览器访问
  • 2、监控Linux主机
    • 2.一、在被监控主机上部署node_exporter软件
    • 2.二、修改prometheus的配置文件
    • 2.三、浏览器访问
  • 3、监控Windows主机
    • 3.一、在被监控主机上部署wmi-exporter软件
    • 3.二、修改prometheus的配置文件
    • 3.三、浏览器访问
  • 4、监控MySQL实例
    • 4.一、配置被监控的MySQL实例
    • 4.二、修改prometheus的配置文件
    • 4.三、浏览器访问
  • 5、监控Oracle实例
    • 5.一、配置被监控的Oracle实例
    • 5.二、修改prometheus的配置文件
    • 5.三、浏览器访问
  • 6、测试邮件告警功能
    • 6.一、测试MySQL宕机
    • 6.二、测试Linux宕机
  • 7、总结


1、部署Prometheus+grafana环境

1.一、下载Prometheus+grafana镜像

[root@docker36 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrprometheus:1.0
1.0: Pulling from lhrbest/lhrprometheus
c1e1cb5fc6d2: Already exists 
d7889870c229: Pull complete 
Digest: sha256:6d2aea56026f4fdb17554b5ad0842766cb8e99a492382b6553ab330d0eb19c4b
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrprometheus:1.0
registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrprometheus:1.0
[root@docker36 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/lhrbest/lhrprometheus:1.0 lhrbest/lhrprometheus:1.0

1.二、建立镜像

[root@docker36 ~]# ip addr | grep 66
    inet 192.168.66.36/24 brd 192.168.66.255 scope global edge0
[root@docker36 ~]# docker run -d --name lhrprometheus01 -h lhrprometheus01 \
>   -p 2222:22 -p 23389:3389 -p 29090:9090 -p 29093:9093 -p 23000:3000 \
>   --privileged=true lhrbest/lhrprometheus:1.0 \
>   /usr/sbin/init
fed3d3ea7275ec337e305a76d5694473a2637be4c71d22e46e669a5ec3b39e57
[root@docker36 ~]# docker exec -it lhrprometheus01 bash
[root@lhrprometheus01 /]#

其中,9090是Prometheus的端口,3000是grafana的端口,3389是Linux远程桌面的端口。mysql

在本文中,须要注意如下内容:linux

一、在该镜像中,已安装了prometheus 2.23版本,grafana 7.3.6版本,alertmanager 0.21版本,node_exporter 1.0.1版本,mysqld_exporter 0.12.1版本,oracledb_exporter 0.2.9版本git

二、192.168.66.36是Prometheus和grafana的IP地址github

三、程序和默认端口对应关系web

端口   程序
9090  prometheus
3000  grafana
9093  alter_manager
9100  node_exporter
9104  mysqld_exporter
9121  redis_exporter
9161  oracledb_exporterredis

1.三、浏览器访问

访问普罗米修斯(Prometheus):http://192.168.66.36:29090/targetssql

image-20201224183829871

访问Grafana:http://192.168.66.36:23000   用户名和密码都是admindocker

默认的Linux系统监控能够看到以下界面:数据库

image-20201225103844427

2、监控Linux主机

2.一、在被监控主机上部署node_exporter软件

须要在被监控的主机上安装node_exporter软件,下载地址:https://prometheus.io/download/

最新版本为:node_exporter-1.0.1.linux-amd64.tar.gz

或者直接将本机的/usr/local/bin/node_exporter文件拷贝到须要被监控的主机上也能够。

假设我这里须要被监控的主机为:121.36.8.186,那么在该主机上执行以下命令:

nohup /usr/local/bin/node_exporter &

检查,node_exporter默认端口为9100:

[root@ecs ~]# netstat -anp | grep 9100
tcp6       0      0 :::9100                 :::*                    LISTEN      24995/node_exporter 
tcp6       0      0 10.0.0.134:9100         210.52.224.155:58598    ESTABLISHED 24995/node_exporter 
[root@ecs ~]# lsof -i:9100            
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
node_expo 24995 root    3u  IPv6 8125597      0t0  TCP *:jetdirect (LISTEN)
node_expo 24995 root    8u  IPv6 8203663      0t0  TCP ecs:jetdirect->210.52.224.155:58598 (ESTABLISHED)

命令行直接访问:

image-20210130104621181

浏览器访问http://121.36.8.186:9100/metrics ,返回:

image-20201225121447363

2.二、修改prometheus的配置文件

修改prometheus的配置文件(/usr/local/prometheus/prometheus.yml),添加第6-8行:

  - job_name: 'Linux'
    static_configs:
    - targets: ['localhost:9100']
      labels:
        instance: Linux_prometheus_localhost
    - targets: ['121.36.8.186:9100']
      labels:
        instance: Linux_121.36.8.186

经过命令热加载:

curl -XPOST http://localhost:9090/-/reload

2.三、浏览器访问

此时再刷新访问:http://192.168.66.36:29090/targets

image-20201225122249725

发现新主机已经被监控到了。此时再去grafana页面查询:

image-20201225122421026

发现已经有数据了。

3、监控Windows主机

3.一、在被监控主机上部署wmi-exporter软件

在须要被监控windows机器安装wmi-exporter,下载节点监控程序并运行,默认端口9182,下载地址:https://github.com/martinlindhe/wmi_exporter

安装完成后,默认安装了service,软件安装路径为:C:\Program Files\windows_exporter\

image-20201225123210029

浏览器访问:http://192.168.66.236:9182/metrics,出现以下信息则,客户端节点正常

image-20201225123233496

3.二、修改prometheus的配置文件

修改prometheus的配置文件(/usr/local/prometheus/prometheus.yml),添加第1-3行:

  - job_name: 'Windows'
    static_configs:
    - targets: ['192.168.66.236:9182']

经过命令热加载:

curl -XPOST http://localhost:9090/-/reload

3.三、浏览器访问

此时再刷新访问:http://192.168.66.36:29090/targets

image-20201225123631964

发现新主机已经被监控到了。此时再去grafana页面查询:

image-20201225123748899

发现已经有数据了。

4、监控MySQL实例

4.一、配置被监控的MySQL实例

监控MySQL实例须要用到mysqld_exporter软件,下载地址:https://prometheus.io/download/

监控MySQL实例能够分为2种部署方式:

一、分离部署+环境变量

这种方式是在每一个mysql服务器上跑一个exporter程序,好比10.10.20.14服务器上跑本身的mysqld_exporter,而登到10.10.20.15服务器上也启动本身的mysqld_exporter,也就是分离部署,这样的话每一个mysql服务器上除了mysqld进程外还会多一个mysqld_exporter的进程。部署方式(本文不使用这种方式):

export DATA_SOURCE_NAME='root:lhr@(192.168.66.35:3317)/'
nohup mysqld_exporter 1>/dev/null 2>&1 &

二、集中部署+配置文件

若是咱们想要保持mysql服务器零***的纯净环境,这时候就能够尝试一下集中部署+配置文件的方式。集中部署,就是说咱们将全部的mysqld_exporter部署在同一台服务器上,在这台服务器上对mysqld_exporter进行统一的管理。

本文,咱们采用第2种方式部署。因此,直接在容器lhrprometheus01内进行配置:

mkdir -p /etc/mysqld_exporter/
cd /etc/mysqld_exporter/

cat > mysql573317.cnf << "EOF"
[client]
user=root
password=lhr
host=192.168.66.35
port=3317
EOF

cat > mysql803318.cnf << "EOF"
[client]
user=root
password=lhr
host=192.168.66.35
port=3318
EOF

unset DATA_SOURCE_NAME
nohup mysqld_exporter --web.listen-address=localhost:9104 --config.my-cnf=/etc/mysqld_exporter/mysql573317.cnf 1>/dev/null 2>&1 &
nohup mysqld_exporter --web.listen-address=localhost:9105 --config.my-cnf=/etc/mysqld_exporter/mysql803318.cnf 1>/dev/null 2>&1 &

-- 校验是否配置成功
curl http://localhost:9104/metrics
curl http://localhost:9105/metrics

4.二、修改prometheus的配置文件

修改prometheus的配置文件(/usr/local/prometheus/prometheus.yml),添加第1-8行:

  - job_name: 'MySQL'
    static_configs:
    - targets: ['localhost:9104']
      labels:
        instance: MySQL_192.168.66.35:3317
    - targets: ['localhost:9105']
      labels:
        instance: MySQL_192.168.66.35:3318

经过命令热加载:

curl -XPOST http://localhost:9090/-/reload

4.三、浏览器访问

此时再刷新访问:http://192.168.66.36:29090/targets

image-20201225141606662

发现MySQL实例已经被监控到了。此时再去grafana页面查询:

image-20201225142222430

发现已经有数据了。

5、监控Oracle实例

5.一、配置被监控的Oracle实例

监控Oracle数据库,须要安装oracle exporter,下载地址:https://github.com/iamseth/oracledb_exporter/releases

监控Oracle和MySQL同样,能够对原Oracle服务器零***,只需在Prometheus服务器上作配置便可,执行以下命令便可:

export DATA_SOURCE_NAME='lhr/lhr@192.168.66.35:1523/LHR11G'
nohup oracledb_exporter -default.metrics /usr/local/oracledb_exporter/default-metrics.toml -web.listen-address 0.0.0.0:9161 &

注意:因为9161端口没有对外暴露,因此,须要进入Linux的远程桌面访问,打开mstsc

image-20201225143704127

image-20201225152457976

image-20201225152540874

192.168.66.36是Prometheus所在的服务器,进入远程桌面,用户名为root,密码为lhr,打开firefox浏览器便可访问。浏览器访问:http://localhost:9161/metrics,若出现以下信息,则说明客户端节点正常。

image-20201225152741209

5.二、修改prometheus的配置文件

修改prometheus的配置文件(/usr/local/prometheus/prometheus.yml),添加第1-5行:

  - job_name: 'Oracle'
    static_configs:
    - targets: ['localhost:9161']
      labels:
        instance: Oracle_192.168.66.35:1523

经过命令热加载:

curl -XPOST http://localhost:9090/-/reload

5.三、浏览器访问

此时再刷新访问:http://192.168.66.36:29090/targets

image-20201225143901427

发现新主机已经被监控到了。此时再去grafana页面查询:

image-20201225144025898

发现已经有数据了。

6、测试邮件告警功能

本镜像环境已经配置了MySQL和Linux服务器的邮件告警功能,能够登陆http://192.168.66.36:29090/alerts查看,相关的规则详情能够参考:http://192.168.66.36:29090/rules

告警的默认收件人是lhrbest@qq.com,若想修改收件人地址,那么能够修改文件/usr/local/alertmanager/alertmanager.yml,将其中的lhrbest@qq.com修改为本身的邮箱便可。在修改完成后,记得重启alertmanager软件,启动命令以下:

pkill alertmanager
nohup alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml &

6.一、测试MySQL宕机

关闭MySQL服务器:

C:\Users\lhrxxt>mysql -uroot -plhr -h192.168.66.35 -P3317
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1003
Server version: 5.7.30-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> shutdown ;
Query OK, 0 rows affected (0.05 sec)

收到邮件:

image-20201225145629064

6.二、测试Linux宕机

首先关闭相关主机,等待收邮件:

image-20201225151130350

7、总结

如何?一番感觉下来,是否是很爽!!!

固然,Prometheus还能够监控其它不少内容,例如SQL Server、PG、Redis、MongoDB、K8s、ES等,这里再也不演示,若想学习更多内容请联系麦老师。

相关文章
相关标签/搜索