Prometheus+Granafa

一、设置网络环境

1.配置网卡

cd /etc/sysconfig/network-scripts
cp ./ifcfg-ens33 ./ifcfg-ens33.bak
sed -i 's/dhcp/static/g' ifcfg-ens33
sed -i 's/ONBOOT=no/ONBOOT=yes/g' ifcfg-ens33
sudo cat >> ifcfg-ens33 <<-'EOF'
IPADDR=192.168.1.30
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF
service network restart
ip addr | grep ens33
cd -
hostnamectl set-hostname prometheus
exit

2.将Hosts文件写入ip与主机名对应关系,可采用域名访问

sudo cat >> /etc/hosts <<-'EOF'
192.168.1.10 ceph01
192.168.1.11 ceph02
192.168.1.12 ceph03
192.168.1.30 prometheus

192.168.1.20 master01
192.168.1.21 slave02
192.168.1.22 slave03
192.168.1.31 proxy01
EOF
#关闭linux内核
setenforce 0
#放行防火墙端口或关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

二、部署Prometheus

1.拉取镜像

docker pull prom/prometheus

2.准备相关挂载目录及文件

准备目录

# /opt/prometheus/data目录,准备用来挂载放置prometheus的数据
# /opt/prometheus/config目录,准备用来放置prometheus的配置文件
# /opt/prometheus/rules目录,准备用来挂载放置prometheus的规则文件
mkdir -p /opt/prometheus/{data,config,rules}
# 授权相关文件夹权限
chmod -R 777 /opt/prometheus/data
chmod -R 777 /opt/prometheus/config
chmod -R 777 /opt/prometheus/rules

3.准备配置文件

# 配置文件
cat > /opt/prometheus/config/prometheus.yml << \EOF
global:
  # 数据采集间隔
  scrape_interval:     15s
  # 告警检测间隔
  evaluation_interval: 15s

# 告警规则
rule_files:
  # 这里匹配指定目录下所有的.rules文件
  - /prometheus/rules/*.rules

# 采集配置
scrape_configs:
  # 采集项(prometheus)
  - job_name: 'prometheus'
    static_configs:
      # prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
      - targets: ['localhost:9090']
      
#DB Servers
  - job_name: mysql_MGR
    static_configs:
      - targets: ['192.168.1.20:9104']
        labels:
          alias: node1
      - targets: ['192.168.1.21:9104']
        labels:
          alias: node2
      - targets: ['192.168.1.22:9104']
        labels:
          alias: node2

EOF
# 检查一下配置文件
cat /opt/prometheus/config/prometheus.yml

prometheus配置项说明:

  • global:全局配置 (如果有内部单独设定,会覆盖这个参数)

  • alerting:告警插件定义。这里会设定alertmanager这个报警插件

  • rule_files:告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现

  • scrape_configs:采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现

  • remote_write:用于远程存储写配置

  • remote_read:用于远程读配置

4.启动容器

# 启动prometheus
# config.file:指定容器中,配置文件的位置
# web.enable-lifecycle:启动此项后,当配置文件发生变化后,可通过HTTP API 发送 post 请求到 /-/reload,实现热加载,如:curl -X POST http://47.105.39.189:9090/-/reload
# -v /etc/localtime:/etc/localtime:ro表示让容器使用宿主机的时间, :ro表示只读(注:此方式只针对宿主机和容器的时区文件均为/etc/localtime)
docker run --name prometheus -d \
    --restart always \
    -p 9090:9090 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/prometheus/data:/prometheus/data \
    -v /opt/prometheus/config:/prometheus/config \
    -v /opt/prometheus/rules:/prometheus/rules \
    prom/prometheus --config.file=/prometheus/config/prometheus.yml --web.enable-lifecycle

三、部署Granafa

1.拉取镜像

docker pull grafana/grafana

2.准备相关挂载目录及文件

准备目录

# /opt/grafana/data目录,准备用来挂载放置grafana的数据
# /opt/grafana/plugins目录,准备用来放置grafana的插件
# /opt/grafana/config目录,准备用来挂载放置grafana的配置文件
mkdir -p /opt/grafana/{data,plugins,config}
# 授权相关文件夹权限
chmod -R 777 /opt/grafana/data
chmod -R 777 /opt/grafana/plugins
chmod -R 777 /opt/grafana/config

3.准备配置文件

# 先临时启动一个容器
docker run --name grafana-tmp -d -p 3000:3000 grafana/grafana:9.3.2

# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/grafana/config/grafana.ini

# 移除临时容器
docker stop grafana-tmp
docker rm grafana-tmp

# 修改配置文件(需要的话)
vim /opt/grafana/config/grafana.ini

4.启动容器

# 启动prometheus
# 环境变量GF_SECURITY_ADMIN_PASSWORD:指定admin的密码
# 环境变量GF_INSTALL_PLUGINS:指定启动时需要安装得插件
#         grafana-clock-panel代表时间插件
#         grafana-simple-json-datasource代表json数据源插件
#         grafana-piechart-panel代表饼图插件
docker run -d \
    --restart always \
    -p 3000:3000 \
    --name=grafana \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/grafana/data:/var/lib/grafana \
    -v /opt/grafana/plugins/:/var/lib/grafana/plugins \
    -v /opt/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
    -e "GF_SECURITY_ADMIN_PASSWORD=admin" \
    -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" \
    grafana/grafana

监控Ceph集群

# 在mon节点开启prometheus插件
ceph mgr module enable prometheus
# exporter默认监听端口
ss -lntup | grep 9283
[root@ceph01 bin]# ss -lntup | grep 9283
tcp    LISTEN     0      5      [::]:9283               [::]:*                   users:(("ceph-mgr",pid=968,fd=16))

监控mysql

1.下载安装mysqld_exporter

下载地址:https://prometheus.io/download/#mysqld_exporter

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
mv mysqld_exporter-0.15.1.linux-amd64 /usr/local/mysqld_exporter
chmod +x /usr/local/mysqld_exporter

2.赋权

mysqld_exporter需要连接到Mysql,所以需要Mysql的权限,我们先为它创建用户并赋予所需的权限

SET GLOBAL super_read_only = OFF;
grant process,replication client,select on *.* to 'mysqld_exporter'@'%' identified by '123456';
FLUSH PRIVILEGES;
EXIT

3.创建.my.cnf文件

cd /usr/local/mysqld_exporter
cat > .my.cnf <<-'EOF'
[client]
user=mysqld_exporter
password=123456
EOF

4.创建systemd服务

#cat > /usr/lib/systemd/system/mysqld_exporter.service <<-'EOF'
cat > /etc/systemd/system/mysqld_exporter.service <<-'EOF'
[Unit]
Description=mysqld_exporter
After=network.target

[Service]
Environment=DATA_SOURCE_NAME=mysqld_exporter:123456@(localhost:3306)/
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf --web.listen-address=:9104
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

/etc/systemd/system/ 目录用于存放用户自定义的 systemd 单元文件,

/usr/lib/systemd/system/ 目录用于存放系统默认的 systemd 单元文件。

用户可以在 /etc/systemd/system/ 目录下添加自定义配置,以覆盖系统默认配置或者添加额外的功能。

5.启动服务

systemctl daemon-reload
systemctl start mysqld_exporter
systemctl status mysqld_exporter
systemctl enable mysqld_exporter

监控其他服务

wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

#安装部署、解压
tar zxvf node_exporter-1.7.0.linux-amd64.tar.gz
cp -rp node_exporter-1.7.0.linux-amd64 /usr/local/node_exporter

cd /usr/local/node_exporter/
nohup ./node_exporter --web.listen-address="192.168.1.20:9100" --log.level=warn &

测试

curl -g -X GET http://192.168.1.20:9100/metrics?collect[]=cpu
 
#go_代表goruntime信息等
curl http://192.168.1.20:9100/metrics|grep go_
#process_代表进程信息等
curl http://192.168.1.20:9100/metrics|grep process


本站由 困困鱼 使用 Stellar 创建。