阳光很暖吧

V1

2022/12/17阅读:27主题:默认主题

未命名文章ss

@

今天我请客,请你快乐😆 继Prometheus+Grafana:生成pdf报表博客,新增动态增删被监控主机

最终效果

常见的添加监控主机3种方法 第一种:在服务端prometheus.yml文件中配置工作节点参数后重启服务,客户端启动node-expoter。以后每次添加一个监控节点都要配置和重启prometheus服务 第二种:使用file_sd_configs参数,以后添加节点需要在prometheus服务端指定位置添加单独的节点配置文件,无需重启prometheus服务,只不过每次都要在服务端配置一个节点的配置信息。 第三种:使用prometheus+consul。客户端只需安装node-exporter+consul服务后,prometheus服务端无需配置或者重启即可监控到该主机,本篇使用这种方法实现。 在这里插入图片描述 自动注册的主机会自动添加到grafana模板中 在这里插入图片描述

Consul 介绍

Consul 是基于 GO 语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。之前我们通过 Prometheus 实现监控,当新增一个 Target 时,需要变更服务器上的配置文件,即使使用 file_sd_configs 配置,也需要登录服务器修改对应 Json 文件,会非常麻烦。不过 Prometheus 官方支持多种自动服务发现的类型,其中就支持 Consul。

1、Prometheus服务端操作

使用yum方式安装consul

官网部署文档:https://developer.hashicorp.com/consul/tutorials/production-deploy/deployment-guide

1、安装依赖

yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

2、查看所有consul版本

 yum --showduplicate list consul

3、安装1.9.4版本

yum install consul-1.9.4-2.x86_64

安装最新版本

yum -y install consul

4、配置consul

安装完成后,看下文件都存放在什么位置

rpm -ql consul
#--------------------------------------------------
/etc/consul.d/consul.env
/etc/consul.d/consul.hcl
/usr/bin/consul
/usr/lib/systemd/system/consul.service

打开/usr/lib/systemd/system/consul.service文件可以发现配置文件存放在/etc/consul.d/目录下,consul.hcl文件就是配置文件 在这里插入图片描述 把配置文件备份,我们重新写一个

mv /etc/consul.d/consul.hcl /etc/consul.d/consul.hcl.bak
vim /etc/consul.d/consul.hcl
#-------------------------------------------
log_level = "ERROR" #日志级别,日志太多可以只打印error日志,不需要可以去掉这行。
advertise_addr = "172.16.1.7" #填写你的网卡IP,如果启动或运行有报错,可以尝试去掉这行。
data_dir = "/dwz/consul/data"
client_addr = "0.0.0.0"
ui_config{
  enabled = true
}
server = true
bootstrap = true
acl = {
  enabled = true
  default_policy = "deny"
  enable_token_persistence = true
}

5、启动服务

chown -R consul:consul /dwz/consul/data  #注意下数据目录的权限。
systemctl enable consul.service
systemctl start consul.service

获取登录Token(记录SecretID,即为Consul登录的Token)

consul acl bootstrap
#-----------------------------------------------------------------
AccessorID:       9070980a-46c5-5c07-c313-824cdd951cba
SecretID:         19b4df51-2ab5-c819-81a1-6a3d3630974f  #记录下这个值
Description:      Bootstrap Token (Global Management)
Local:            false
Create Time:      2022-12-16 03:06:25.073664756 -0500 EST
Policies:
   00000000-0000-0000-0000-000000000001 - global-management

浏览器访问http://ip:8500 在这里插入图片描述

配置Prometheus服务

vim prometheus.yml

在scrape_configs段中新增:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
# 采集node exporter监控数据
################################自动注册配置#######################################
  - job_name: 'consul'
    consul_sd_configs:            # 配置基于consul的服务发现
    - server: 172.16.1.7:8500       # consul地址
      token: 19b4df51-2ab5-c819-81a1-6a3d3630974f     # 从上面获取得Token
      refresh_interval: 60s      # 刷新间隔
#      services: ['node_exporter','alertmanager_exporter','consul_exporter'] 
      services: []
    relabel_configs:        # 对默认的Metadata进行自定义Relabeling
    - source_labels: [__meta_consul_service_address]
      target_label: 'ipaddress'
    - source_labels: [__meta_consul_service_metadata_instance] 
      target_label: 'instance'
    - source_labels: [__meta_consul_service_metadata_group]
      target_label: 'group'
    - source_labels: [__meta_consul_service_metadata_environment]
      target_label: 'environment'
    - source_labels: [__meta_consul_service_metadata_Project]
      target_label: 'Project'
    - source_labels: [__meta_consul_service]
      target_label: 'service'

重新启动Prometheus服务

systemctl restart prometheus

2、客户端操作(被监控节点)

安装node_exporter服务

wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz 
cd node_exporter-1.2.2.linux-amd64
nohup ./node_exporter &

编写注册脚本

vim join.sh

#!/bin/bash
HOST=`hostname`
machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`")
IP=$(ip addr | grep "$machine_physics_net" | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
server_name=`hostname | awk -F'.' '{print $1}'`
#PUBLIC_IP=`curl icanhazip.com`
PUBLIC_IP=$(ip addr | grep "$machine_physics_net" | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')

curl -X PUT -H "Content-Type: application/x-www-form-urlencoded" -H "X-Consul-Token: 19b4df51-2ab5-c819-81a1-6a3d3630974f" -d '{"id": "'$HOST'","name": "'$HOST'","address": "'$IP'","port": 9100,"tags": ["linux_system"],"meta": {"factory": "google", "project": "'$server_name'", "host":"'$HOST'", "public_ip":"'$PUBLIC_IP'", "private_ip":"'$IP'", "monitoring-items": "linux_base"},  "checks": [{"http": "http://'$IP':9100/metrics", "interval": "5s"}]}'  http://172.16.1.7:8500/v1/agent/service/register > /dev/null 2>&1 && echo -e "\033[92m $HOST 注册成功 \033[0m"

3、验证

在被监控主机上运行注册脚本,加入到consul服务

自动增加主机

sh join.sh

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0     38      0 --:--:-- --:--:-- --:--:--    38
 dev-k8s-worker-server-05 注册成功 

查看consul服务,已经注册成功了 在这里插入图片描述 查看prometheus服务 在这里插入图片描述 查看grafana服务 在这里插入图片描述

手动删除

curl --request PUT http://172.16.1.7:8500/v1/agent/service/deregister/nexus3 -H "X-Consul-Token: 19b4df51-2ab5-c819-81a1-6a3d3630974f"

在consul服务中会移除这个主机 在这里插入图片描述 在prometheus中同样看不到这台主机 在这里插入图片描述 在grafana中还能看到此主机,但是数据不全,等待数据传输完成,主机也被删除 在这里插入图片描述

说明

1、加入到consul时不加token也能注册成功,但是grafana中是不会出现该主机的 2、在Prometheus服务配置文件中relabel在这里插入图片描述 代表着重命名意义,也就是在prometheus中把这些tag重名了,最终在grafana中就可以利用了 例如把

    - source_labels: [__meta_consul_service_metadata_instance] 
      target_label: 'instance'

该成

    - source_labels: [__meta_consul_service] 
      target_label: 'instance'

Prometheus中就会把instance改成dev-k8s-worker-server-05 在这里插入图片描述

分类:

后端

标签:

后端

作者介绍

阳光很暖吧
V1