您的位置 首页 php

Prometheus精细化监控每个容器

作者:MeshCloud脉时云架构师 王亚勇

一 引言

近几年来,持续集成、微服务的影响范围不断扩大,微服务架构,已渐渐成为服务器架构的主流。但是在微服务、持续集成的作用下,将会产生成百上千的服务组件;而每个服务组件容器的生命周期管理工作日渐突出。为了提高对容器生命周期、使用内存、Cpu、负载等等指标刻不容缓,尽可能的细化每一个服务使用资源,提高整体资源利用率。传统开源监控系统如Nagios、Zabbix等,虽然这些监控系统支持自定义监控,但是做到如此精细化的监控每个容器相信整个过程会很麻烦。而与此同时Prometheus横空出世,简直是天降奇兵,展现出强大的优势。选择Prometheus,不是为了进行应用程序监视,而是为了更好地了解其某些硬件。我们还会获得容量和性能报告,以告诉我们何时遇到问题,并将其用于预测和增加硬件。

Prometheus优势

  • 易于管理
  • 轻易获取服务内部状态
  • 高效灵活的查询语句
  • 支持本地和远程存储
  • 采用http协议,默认pull模式拉取数据,也可以通过中间网关push数据
  • 支持自动发现
  • 可扩展
  • 易集成

Prometheus特性

  • 多维数据模型:由度量名称和键值对标识的时间序列数据
  • PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
  • 不依赖分布式存储,单个服务器节点可直接工作
  • 基于HTTP的pull方式采集时间序列数据
  • 推送时间序列数据通过PushGateway组件支持
  • 通过服务发现或静态配置发现目标
  • 多种图形模式及仪表盘支持(grafana)

整体架构

架构说明

  • Server端: 提供http server, retrival, TSDB服务
  • Special-Purpose exporters, 对多种不同设备,服务提供对应的exporters,参考: Exporters and integrations | Prometheus
  • Alertmanager,提供告警规则设置,告警触发,告警分组、抑制,告警通知方式配置等功能
  • 可视化组件, 支持自带web UI,grafana,API clients

技术简介

监控是整个产品周期中最重要的一环,随着用户的增多,服务随时可能会被系统oom如何判断web服务是因为用户访问过多达到了瓶颈? 还是程序代码bug导致的?及时预警减少故障避免影响扩大,根据历史数据可以追溯问题根源,并且分析监控数据,可以找出用户体验优化方案。

1.监控维度

  • 系统监控 CPU,内存,磁盘,网卡流量,TCP状态,进程数。
  • 应用监控 Nginx,Tomcat,PHP,MySQL,Redis 等。
  • 日志监控 系统日志,服务日志,访问日志,错误日志。
  • 安全监控 WAF,敏感文件监控。
  • API监控 可用性,接口请求,响应时间。
  • 流量分析 根据流量获取用户相关信息,例如:某页面访问状况,页面停留时间等。

2.监控目的

  • 根据历史监控数据,实时反馈数据状态并做出预测
  • 发生异常时,及时报警,做出相应措施
  • 根据监控报警及时定位问题根源
  • 通过可视化图表展示,便于直观获取信息
  • 保证服务可靠性安全性,使业务持续稳定运行

实施步骤

  • 准备工作

1.明确要查询指标所对应的exporter

2.找到该exporter中相关的指标,并确定该指标的数据类型

 mkdir -p /promethues
mkdir -p /promethues/server 
mkdir -p /home/promethues/client  
  • 安装Prometheus Server
 wget 
tar xvf prometheus-2.31.0.linux-amd64.tar.gz
mv prometheus-2.31.0.linux-amd64 Prometheus
more prometheus.yml
...scrape_configs: 
- job_name: 'prometheus' 
static_configs: 
- targets: ['localhost:9090',’localhost:9100’]  
  • 创建系统服务
 Vi /etc/systemd/system/prometheus.service
[Unit]
Description=prometheus
After=network.target

[Service]
Type=simple
ExecStart=/mnt/Prometheus/prometheus --config.file="/mnt/Prometheus/prometheus.yml" --storage.tsdb.retention.time=18250d --storage.tsdb.path=/data --web.enable-admin-api
LimitNOFILE=65536
PrivateTmp=true
RestartSec=2
StartLimitInterval=0
Restart=always

[Install]
WantedBy=multi-user.target  
  • 启动服务
 systemctl daemon-reload
systemctl enable prometheus.service
systemctl start prometheus.service  
  • 访问

  • 数据备份
 /usr/bin/curl -XPOST 
计划任务 crontab -e
0 1 * * * /usr/bin/curl -XPOST  >> 
/home/prometheusbackup.log  
  • Node_exporter安装配置
 wget


tar xvf node_exporter-1.2.2.linux-amd64.tar.gz

mv node_exporter-1.2.2.linux-amd64 node_exporter  
  • 创建系统服务
 vi /etc/systemd/system/node_exporter.service

[Unit]
Description=This is prometheus node exporter

[Service]
Type=simple
ExecStart=/opt/meshcloud/node_exporter/node_exporter --web.listen-address=:10009 
ExecReload=/bin/kill -HUP
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

注意:node_exporter目录和配置存放在node_exporter目录下,指定路径不要出错  
  • 启动服务
 Systemctl daemon-reload

Systemctl enable node_exporter.service

Systemctl start node_exporter.service  
  • 配置prometheus.yml
 vim /mnt/Prometheus/prometheus.yml
- job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9090', ’localhost:9100’'120.220.26.2:10009']  
  • 重启服务
 Systemctal restart prometheus.service  

TLS的引入和基本身份验证

由于 Metrics 在 Prometheus 中不被视为秘密,长期以来,通过 HTTPS 抓取指标的方法是使用反向代理。大多数的 /metrics 接口都是直接暴露出来的,没什么特别的安全措施,所以需要安全认证。

  • 生成自签TLS证书
 
vi /mnt/node_exporter/mesh.cnf

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CN
ST = Beijing
L =  Mesh
O = Private company
CN = *
[v3_req]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:TRUE
subjectAltName = @alt_names
[alt_names]
DNS.1 = *
DNS.2 = *.*
DNS.3 = *.*.*
DNS.4 = *.*.*.*
DNS.5 = *.*.*.*.*
DNS.6 = *.*.*.*.*.*
DNS.7 = *.*.*.*.*.*.*
IP.1 = 内网IP
IP.2 = 外网IP  
  • 生成证书
 openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout node_exporter.key -out node_exporter.crt -config mesh.cnf -days 1825
  
  • 添加配置
 vim /mnt/node_exporter/web.yml 
tls_server_config:
  cert_file: node_exporter.crt
  key_file: node_exporter.key
basic_auth_users:
device_user1: $2b$12$7smxnPCjLtyzstbSMY9z8O0l2/H1rQa58U1NGVaQRGo3fUiTDFCnq  

  • 添加启动项
 vim /etc/systemd/system/node_exporter.service

[Unit]
Description=This is prometheus node exporter

[Service]
Type=simple
ExecStart=/mnt/node_exporter/node_exporter --web.listen-address=:10009 --web.config=/mnt/node_exporter/web.yml
ExecReload=/bin/kill -HUP
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target  
  • 启动服务
 Systemctl start node_exporter.service  
  • 配置prometheus.yml
 
vim /mnt/Prometheus
- job_name: 'node_exporter'
    scheme: https
    basic_auth:
      username: device_user1
      password: 123456
    tls_config:
      insecure_skip_verify: true
      ca_file: node_exporter.crt
    static_configs:
    - targets: ['IP:9100']  
  • 加载服务
 killall -HUP prometheus  

以上为加密,让监控更安全,成功!

  • 基于文件服务自动发现监控
 vi etc/prometheus/configs/sd_configs/device_user1.json
[
  {
    "labels": {
      "service": "pcdn",
      "env": "prod"
    },
    "targets": [
      "IP地址:9100","IP地址:10009","IP地址:10009"
   ]
  }
]
注:如果在有node节点,只需在这里添加即可,不同分组可以在 } 后边添加。  
 vi /mnt/Prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: 'device_user1'
    scheme: https
    basic_auth:
      username: device_user1
      password: 123456
    tls_config:
      insecure_skip_verify: true
      ca_file: /mnt/Prometheus/node_exporter.crt
    file_sd_configs:
      - files:
        - '/etc/prometheus/configs/sd_configs/device_user1.json'  

  • 重启prometheus,node服务
 systemctl restart node_exporter.service
killall -HUP prometheus  
  • 验证结果

六 常见问题

  • 401问题

只要修改 Prometheus 的配置文件,为其增加 basic_auth的配置项即可。

  • no data问题

导入官网下载的模板后发现内存使用率一直显示no data,解决方案:编辑内存使用率的panel,修改查询为如下:

 (1 - (node_memory_MemFree_bytes{instance=~"$node"} / (node_memory_MemTotal_bytes{instance=~"$node"})))* 100  

文章来源:智云一二三科技

文章标题:Prometheus精细化监控每个容器

文章地址:https://www.zhihuclub.com/154377.shtml

关于作者: 智云科技

热门文章

网站地图