企业专用版 prometheus+grafana监控

Posted 水木,年華

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了企业专用版 prometheus+grafana监控相关的知识,希望对你有一定的参考价值。

一、Prometheus介绍

1.1 Prometheus概述

Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,
拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目;原生支持K8s和docker。

https://prometheus.io
https://github.com/prometheus

1.2 Prometheus 特点

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

1.3 Prometheus组件与架构


• Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
• ClientLibrary:客户端库(提供一些语言库,可以集成到项目里面;能方便暴露采集的指标)
• Push Gateway:短期存储指标数据。主要用于临时性的任务
• Exporters:采集已有的第三方服务监控指标并暴露metrics
• Alertmanager:告警
• Web UI:简单的Web控制台

二、Prometheus 部署

• 二进制部署

https://prometheus.io/docs/prometheus/latest/getting_started/

• Docker部署

https://prometheus.io/docs/prometheus/latest/installation/

•访问方式

访问地址:http://IP:9090

2.1 prometheus二进制部署

解压安装包

[root@prometheus ~]# tar zxf prometheus-2.27.1.linux-amd64.tar.gz

启动

[root@prometheus prometheus-2.27.1.linux-amd64]# ./prometheus

访问

http://192.168.66.100:9090

2.2 premetheus -h 命令行常用参数

• --config.file=“prometheus.yml” # 指定配置文件
• --web.listen-address= “0.0.0.0:9090” # 监听地址和端口
• --log.level=info # 日志级别
• --alertmanager.timeout=10s # 与报警组件的超时时间
• --storage.tsdb.path="data/ " # 数据目录
• --storage.tsdb.retention.time=15d # 数据保存时间,默认15天

2.3 配置为系统服务管理:

vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
[Service]
ExecStart=/opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID  
KillMode=process #只杀主进程
[Install]
WantedBy=multi-user.target
[root@localhost ~]# mkdir -p /opt/monitor
[root@localhost ~]# cd /opt/monitor/
[root@localhost monitor]# mv prometheus-2.27.1.linux-amd64/ prometheus
[root@localhost monitor]# systemctl daemon-reload
[root@localhost monitor]# systemctl start prometheus
[root@localhost monitor]# systemctl enable prometheus

2.4 prometheus 配置文件

[root@localhost prometheus]# vim prometheus.yml

• global:全局配置
scrape_interval: 15s # 采集数据时间间隔
evaluation_interval: 15s # 评估告警规则时间间隔,默认1分钟
scrape_timeout: 5s # 采集数据超时时间,默认10秒

• rule_files:告警规则
• scrape_configs:配置被监控端,称为target,每个target用
job_name分组管理,又分为静态配置和服务发现
• alerting:告警配置
• remote_write/remote_read:从远程数据库读写

2.5 配置被监控端

目标(targets):被监控端
实例(Instances):每个被监控端称为实例
作业(Job):具有相同目标的实例集合称为作业

scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['192.168.1.10:9090']

2.6 监控指标数据模型

数据模型:
• Prometheus将所有数据存储为时间序列;
• 具有相同度量名称以及标签属于同一个指标;
• 每个时间序列都由度量标准名称和一组键值对(称为标签)唯一标识,
通过标签查询指定指标

指标格式:

<metric name> <label name>=<label value>,...

三、监控案例

3.1 如何监控服务

如果要想监控,前提是能获取被监控端指标数据,并且这个
数据格式必须遵循Prometheus数据模型,这样才能识别和
采集,一般使用exporter提供监控指标数据。

1、自己写metrics接口,遵循数据模型。
1)先知道怎么收集你要监控指标。
2)集成官方的客户端或者自己数据格式,暴露出来。
2、使用社区维护的exporter(采集器,以数据模型暴露metrics接口)

exporter列表:

https://prometheus.io/docs/instrumenting/exporters

3.2 Grafana部署

Grafana是一个开源的度量分析和可视化系统。
部署文档:https://grafana.com/grafana/download
访问地址:http://IP:3000
用户名/密码:admin/admin # 第一次需要重置密码

[root@localhost monitor]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.4.linux-amd64.tar.gz
[root@localhost monitor]# tar zxf grafana-enterprise-8.4.4.linux-amd64.tar.gz
[root@localhost monitor]# mv grafana-8.4.4 grafana

配置为系统服务管理:

vim  /usr/lib/systemd/system/grafana.service
[Unit]
Description=grafana
[Service]
ExecStart=/opt/monitor/grafana/bin/grafana-server -homepath=/opt/monitor/grafana
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start grafana
systemctl enable grafana

Grafana只用于展示数据,但这个数据从哪里来?
需要你根据提供数据的服务选择,支持的数据源如下:

选择Prometheus,只需要指定URL即可。

3.3 监控Linux服务器

node_exporter:用于监控Linux系统的指标采集器。
安装在被监控端的服务器,不是通过网络连接,而是通过读取本地文件系统收集的。
常用指标:
• CPU
• 内存
• 硬盘
• 网络流量
• 文件描述符
• 系统负载
• 系统服务
数据接口:http://IP:9100
使用文档:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter

3.3.1 安装node_exporter

[root@node1 ~]# wget   https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
[root@node1 ~]# tar zxf node_exporter-1.3.1.linux-amd64.tar.gz
[root@node1 ~]# mv node_exporter-1.3.1.linux-amd64  /usr/local/node_exporter
[root@node1 ~]# cd /usr/local/node_exporter/
[root@node1 node_exporter]# ./node_exporter

3.3.2 配置为系统服务管理

vi /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter --
web.config=/usr/local/node_exporter/config.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter

3.3.3 在Prometheus配置文件添加被监控端

[root@localhost prometheus]# vim prometheus.yml
   static_configs:
    - targets: ['localhost:9090']
  - job_name: 'web-services'
    static_configs:
    - targets: ['192.168.66.101:9000','192.168.66.102:9100']

3.3.4 检查配置文件,并执行加载

[root@localhost prometheus]# ./promtool check config ./prometheus.yml
[root@localhost prometheus]# kill -HUP 21689

3.3.5 使用Grafana展示node_exporter数据指标

仪表盘ID: 9276

把以下两个网卡设备改为ens33

3.3.6 启用HTTP认证

生成密码

[root@node1 ~]# yum install httpd-tools -y
[root@node1 ~]# htpasswd -nBC 12 '' | tr -d ':\\n'
New password:
Re-type new password:
$2y$12$JvsLhXCFePQNY5VV2jD7PeZTEJifCNAg0aCj7iBoQRO4/SRH/vMgi[root@node1 ~]#

修改配置文件

[root@node1 ~]# cd /usr/local/node_exporter/
[root@node1 node_exporter]# vim  config.yml
basic_auth_users:
 prometheus: $2y$12$JvsLhXCFePQNY5VV2jD7PeZTEJifCNAg0aCj7iBoQRO4/SRH/vMgi
[root@node1 node_exporter]# systemctl daemon-reload
[root@node1 node_exporter]# ystemctl start node_exporter

再次登录需要输入用户名和密码

3.3.7 在Prometheus配置文件添加被监控端

修改prometheus server端配置文件

[root@localhost prometheus]# vim prometheus.yml
   static_configs:
    - targets: ['localhost:9090']
  - job_name: 'web-services'
    basic_auth:
     username: prometheus
     password: 123456
    static_configs:
    - targets: ['192.168.66.101:9100','192.168.66.102:9100']
[root@localhost prometheus]# kill -HUP 21689

3.3.8 监控系统服务运行状态

[root@node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/config.yml --collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

在prometheus server端可查看服务状态

在grafana上图表展示:

3.4 监控Docker服务器

cAdvisor (Container Advisor) :用于收集正在运行的容器资源使用和性能信息。
项目地址:https://github.com/google/cadvisor

Docker部署cAdvisor:

docker run -d \\
--volume=/:/rootfs:ro \\
--volume=/var/run:/var/run:ro \\
--volume=/sys:/sys:ro \\
--volume=/var/lib/docker/:/var/lib/docker:ro \\
--volume=/dev/disk/:/dev/disk:ro \\
--publish=8080:8080 \\
--detach=true \\
--name=cadvisor \\
google/cadvisor:latest

修改prometheus.yml文件

[root@localhost ~]# vim /opt/monitor/prometheus/prometheus.yml
 - job_name: 'docker'
    static_configs:
    - targets: ['192.168.66.101:8080']
[root@localhost ~]# kill -HUP 21689

Grafana展示多台主句docker监控
导入仪表盘
仪表盘模板ID:193


编辑图表

都修改完后展示

3.5 监控mysql服务器

安装数据库,提权

[root@node1 ~]#  docker run -d --name db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 
[root@node1 ~]# docker exec -it db  bash
root@2b13ec51383b:/# mysql -uroot -p123456
mysql> grant PROCESS, REPLICATION CLIENT, SELECT ON *.* to 'exporter'@'%' identified by '123456';

下载之指标暴露器并安装

[root@node1 ~]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
[root@node1 ~]# tar zxvf mysqld_exporter-0.14.0.linux-amd64.tar.gz、
[root@node1 ~]# mv mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter    
[root@node1 ~]# cd /usr/local/mysqld_exporter/
[root@node1 mysqld_exporter]# vim  .my.cnf
[root@node1 mysqld_exporter]#  ./mysqld_exporter --config.my-cnf=.my.cnf
[client]
user=exporter
password=123456


修改prometheus配置文件

[root@prometheus prometheus]# vim prometheus.yml
[root@prometheus prometheus]# kill -HUP  51848
 - job_name: 'dbserver'
    static_configs:
    - targets: ['192.168.66.101:9104]

导入仪表盘
仪表盘ID:7362

四、自动化监控

Prometheus服务发现
Prometheus添加被监控端支持两种方式:
• 静态配置:手动配置
• 服务发现:动态发现需要监控的Target实例

支持服务发现的来源:
• azure_sd_configs
• consul_sd_configs
• dns_sd_configs
• ec2_sd_configs
• openstack_sd_configs
• file_sd_configs
• gce_sd_configs
• kubernetes_sd_configs
• marathon_sd_configs
• nerve_sd_configs
• serverset_sd_configs
• triton_sd_configs

4.1 基于文件的服务发现

[root@prometheus ~]# vim /opt/monitor/prometheus/prometheus.yml
  - job_name: 'test'
    file_sd_configs:
    - files: ['/opt/monitor/prometheus/sd_config/*.yml']
      refresh_interval: 5s # 每隔5秒检查一次

添加被监控端:

[root@prometheus ~]# cd /opt/monitor/prometheus/sd_config/
[root@prometheus sd_config]# vim node.yml
- targets: ['192.168.66.101:8080','192.168.66.102:8080']

4.2 基于Consul的服务发现

Consul是一个分布式的服务发现和键/值存储系统。

Docker部署Consul:
docker run --name consul -d -p 8500:8500 consul

向Consul注册服务:

curl -X PUT -d '"id": "Linux-1","name": "Linux","address": "192.168.66.101","port":
9100,"tags": ["service"],"checks": ["http": "http://192.168.66.101:9100","interval":
"5s"]' http://192.168.66.103:8500/v1/agent/service/register

修改prometheus配置文件

[root@prometheus prometheus]#  vim /opt/monitor/prometheus/prometheus.yml
  - job_name: 'consul'
    consul_sd_configs:
    - server: 192.168.66.103:8500
      services: ['Linux']
[root@prometheus prometheus]# ./promtool  check config  prometheus.yml
[root@prometheus prometheus]# kill -HUP 51848

五、监控Kubernetes

5.1 监控指标

Kubernetes本身监控
• Node资源利用率
• Node数量
• Pods数量(Node)
• 资源对象状态
Pod监控
• Pod数量(项目)
• 容器资源利用率
• 应用程序

5.2 监控原理

服务发现类型

5.3 监控K8s集群Pod

创建容器
1、K8s RBAC授权

kubectl apply -f rbac.yaml

2、获取Token并保存到文件


2、获取Token并保存到文件

[root@master ~]# kubectl get sa prometheus -n kube-system -o yaml

[root@master ~]# kubectl describe secret prometheus-token-rc6wh -n kube-system > k8s.token
[root@master ~]# scp k8s.token  192.168.80.4:/opt/monitor/prometheus

修改prometheus配置文件;创建Job和kubeconfig_sd_configs

  - job_name: kubernetes-nodes-cadvisor
    metrics_path: /metrics
    scheme: https
    kubernetes_sd_configs:
    - role: node
      api_server: https://192.168.80.1:6443
      bearer_token_file: /opt/monitor/prometheus/k8s.token
      tls_config:
        insecure_skip_verify: true #不需要认证
    bearer_token_file: /opt/monitor/prometheus/k8s.token
    tls_config:
      insecure_skip_verify: true   #不需要认证
    relabel_configs:
    # 将标签(.*)作为新标签名,原有值不变
    - action: labelmap
      regex: __meta_kubernetes_node_label_(.*)
    # 修改NodeIP:10250为APIServerIP:6443
    - action: replace
      regex: (.*)
      source_labels: ["__address__"]
      target_label: __address__
      replacement: 192.168.80.1:6443
    # 实际访问指标接口 https://NodeIP:10250/metrics/cadvisor 这个接口只能APISERVER访问,故此重新标记标签使用APISERVER代理访问
    - action: replace
      source_labels: [__meta_kubernetes_node_name]
      target_label: __metrics_path__
      regex: (.*)
      replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor

导入仪表盘

5.4 监控K8s资源对象状态

1、部署kube-state-metrics

[root@master ~]# kubectl apply -f kube-state-metrics.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-state-metrics
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-state-metrics
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups: [""]
  resources:
  - configmaps
  - secrets
  - nodes
  - pods
  - services
  - resourcequotas
  - replicationcontrollers
  - limitranges
  - persistentvolumeclaims
  - persistentvolumes
  - namespaces
  - endpoints
  verbs: 以上是关于企业专用版 prometheus+grafana监控的主要内容,如果未能解决你的问题,请参考以下文章

企业专用版 prometheus+grafana监控

第十三讲:Prometheus 企业级实际使?

Linux集群监控部署: prometheus 普罗米修斯 + Grafana(超详细)

Grafana+Prometheus系统监控之MySql

Prometheus普罗米修斯+Grafana部署企业级监控之 promQL语法

Prometheus普罗米修斯+Grafana部署企业级监控之 promQL语法