20230315_使用ConsulManager管理监控系列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20230315_使用ConsulManager管理监控系列相关的知识,希望对你有一定的参考价值。

20230315_使用ConsulManager管理监控系列

一、概述

基于consul服务发现,只需要在consul中维护监控组件配置,prometheus就能够动态发现配置了。
prometheus数据源的配置主要分为静态配置和动态发现, 常用的为以下几类:
    1)static_configs: #静态服务发现
    2)file_sd_configs: #文件服务发现
    3)dns_sd_configs: DNS #服务发现
    4)kubernetes_sd_configs: #Kubernetes 服务发现
    5)consul_sd_configs: Consul #服务发现
    ...

本次主要通过Consul服务发现,对prometheus进行配置,以及相关的操作进行讲解。
为了更好的直观consul服务,使用ConsulManager进行操作。
涉及的大体流程如下:
    1)consul服务部署
    2)ConsulManage服务部署及使用,通过使用过程中遇到的问题,反推prometheus配置。
    3)prometheus服务部署及使用
    4)grafana服务部署及使用
    5)node-export服务部署
    6)blackbox-export服务部署
    7)自定义grafana监控视图

相关官网:
    https://github.com/starsliao/ConsulManager
    https://github.com/prometheus/prometheus

二、consul相关

2.1 部署consul服务

官方操作文档: https://github.com/starsliao/ConsulManager/blob/main/docs/Consul%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E.md
1)# 使用yum部署consul
    # 注意:ConsulManage暂时不兼容consul-1.15.x的版本,已安装1.15.x版本的请先卸载后安装以下版本。
    yum install -y yum-utils
    yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
    yum -y install consul-1.14.5-1

2)# 如果yum下载失败,可以直接下载RPM包安装
    wget https://rpm.releases.hashicorp.com/RHEL/7/x86_64/stable/consul-1.14.5-1.x86_64.rpm
    rpm -ivh ./consul-1.14.5-1.x86_64.rpm

3)# 配置
    vi /etc/consul.d/consul.hcl
内容如下:
---
log_level = "ERROR" #日志级别,日志太多可以只打印error日志,不需要可以去掉这行。
advertise_addr = "192.168.x.x" #填写你的网卡IP,如果启动或运行有报错,可以尝试去掉这行。
data_dir = "/opt/consul"
client_addr = "0.0.0.0"
ui_config
  enabled = true

server = true
bootstrap = true
acl = 
  enabled = true
  default_policy = "deny"
  enable_token_persistence = true

---

4)# 启动服务        
    mkdir /opt/consul
    chown -R consul:consul /opt/consul  #注意下数据目录的权限。
    systemctl enable consul.service
    systemctl start consul.service

5)# 安装后首次获取登录Token(记录SecretID,即为Consul登录的Token)
    consul acl bootstrap|grep SecretID

6)# 忘记global-management Token,重新生成    
    # 记录最后的reset index: xx
    consul acl bootstrap
    
    # 进入consul数据目录执行
    echo 13 > acl-bootstrap-reset
    
    # 重新创建一个global-management Token
    consul acl bootstrap    

2.2 部署consul集群

todo

三、consul manager相关

3.1 部署ConsulManage

1)# 编写ConsulManage docker-compose文件
    vim consul-manager.yml
内容如下:
---    
version: "3.2"
services:
  flask-consul:
    image: swr.cn-south-1.myhuaweicloud.com/starsl.cn/flask-consul:latest
    container_name: flask-consul
    hostname: flask-consul
    restart: always
    volumes:
      - /usr/share/zoneinfo/PRC:/etc/localtime
    environment:
      # 获取登录token记录secretid即为consul登录的token
      consul_token: c158f64b-3a7c-d63e-df1e-c10b1dec7884
      # 填写consul服务所在地址
      consul_url: http://192.168.58.10:8500/v1
      # 填写登录界面密码
      admin_passwd: 123456
      log_level: INFO
  nginx-consul:
    image: swr.cn-south-1.myhuaweicloud.com/starsl.cn/nginx-consul:latest
    container_name: nginx-consul
    hostname: nginx-consul
    restart: always
    ports:
      - "1026:1026"
    volumes:
      - /usr/share/zoneinfo/PRC:/etc/localtime
---
 
2)# 启动服务
    docker-compose pull && docker-compose -f consul-manager.yml up -d

3)# 访问web
    http://IP:1026,使用配置的变量 admin_passwd 登录    

# 注意: 本文写的时间,consulManage版本为v0.12.4,部分版本之间界面操作会有差异。

3.2 使用ConsulManage

# 注: 更详细操作请查看官方文档,本文只举例部分功能引出prometheus,引出完整的监控流程

3.2.1 添加自建主机

云资源管理 -》 ecs管理 -》 自建主机管理。如下图1
根据提示添加完所需监控主机,部分信息不知的可以随便填,如监控的端口,后续会更改。点击Prometheus配置,选择相应的服务,生成配置信息。如下图2
此时,我们需要将生成的配置信息,添加到Prometheus服务中,接下来我们部署Prometheus服务。

四、prometheus相关

4.1 部署Prometheus服务

1)# 编写Prometheus服务 docker-compose文件
    cd /data/
    vim monitor.yml
内容如下:
---
version: "3.7" 

services:
  prometheus:
    restart: always
    image: base.image.docker:5080/prom/prometheus:v2.21.0
    container_name: prometheus
    volumes:
      - /etc/localtime:/etc/localtime
      - v-prometheus:/prometheus
      - ./prometheus:/etc/prometheus
    ports:
      - "7901:9090"
---

2)# 创建配置文件,将3.2.1 添加自建主机操作中生成的job_name配置复制到scrape_configs节点下,完整文件如下,缺省报警模块。
    mkdir prometheus
    cd prometheus
    vim prometheus.yml 
---
global:
  scrape_interval: 30s
  scrape_timeout: 10s
  evaluation_interval: 30s
  external_labels:
    prometheus: test
    env: test

scrape_configs:
        
  - job_name: node_exporter
    scrape_interval: 15s
    scrape_timeout: 5s
    consul_sd_configs:
      - server: 192.168.58.10:8500
        token: c158f64b-3a7c-d63e-df1e-c10b1dec7884
        refresh_interval: 30s
        services: [selfnode_exporter]
        tags: [linux]
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*OFF.*
        action: drop
      - source_labels: [__meta_consul_service]
        target_label: cservice
      - source_labels: [__meta_consul_service_metadata_vendor]
        target_label: vendor
      - source_labels: [__meta_consul_service_metadata_region]
        target_label: region
      - source_labels: [__meta_consul_service_metadata_group]
        target_label: group
      - source_labels: [__meta_consul_service_metadata_account]
        target_label: account
      - source_labels: [__meta_consul_service_metadata_name]
        target_label: name
      - source_labels: [__meta_consul_service_metadata_iid]
        target_label: iid
      - source_labels: [__meta_consul_service_metadata_exp]
        target_label: exp
      - source_labels: [__meta_consul_service_metadata_instance]
        target_label: instance
      - source_labels: [instance]
        target_label: __address__
---  

3)# 启动prometheus服务
    docker-compose -f monitor.yml up -d prometheus

4)# 查看服务启动
    docker ps # 服务正常启动即可。    

5)# 登录界面
      http://IP:7901,注意7901是compose文件中的自定义映射端口,不是官方默认端口9090

4.2 Prometheus服务使用

登录界面后,点击Status -》Targets即可看到node_export任务。如下图。
因为之前的步骤中没有部署node_export服务,所以显示的服务是down的状态,别着急接下来我们在所需监控的主机上部署node_export服务即可。

4.3 node_export服务部署

1)# 在所需监控的每台主机上都需要部署node_export服务
    cd /data/
    vim node-export.yml
内容如下:
---
version: "3.7" 

services:
  node-exporter:
    restart: always
    stdin_open: true
    tty: true
    container_name: node-exporter
    image: prom/node-exporter
    cap_add:
      - ALL
    ports:
      - "7100:9100" # 自定义暴露的端口7100
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /:/rootfs:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
---

2)# 启动服务
     docker-compose -f node-export.yml up -d node-exporter

3)# 更新ConsulManage服务中主机信息
    将部署完node_export服务的主机添加到《3.2.1 添加自建主机》操作中的主机列表里。之前未知的端口,即为node_export暴露的端口,我这边是7100 。

4)# 重新打开Prometheus ui界面,执行《4.2 Prometheus服务使用》操作,即可发现node_export 任务中监控的主机状态即为up。如之前4.2图所示。

5)# Prometheus的界面查看不友好,所以这时候使用grafana服务展示监控到的数据,接下来进行grafana相关操作。

五、grafana相关

5.1 grafana服务部署

1)# 编写grafana服务compose文件,打开之前的Prometheus服务的compose文件monitor.yml 在此文件中继续添加服务。
    cd /data
    vim monitor.yml
添加内容如下:
---
  grafana:
    restart: always
    image: grafana/grafana:9.4.3
    container_name: grafana
    volumes:
      - /etc/localtime:/etc/localtime
      - v-grafana:/var/lib/grafana
    ports:
      - "7903:3000"
---

2)# 启动服务
     docker-compose -f monitor.yml up -d grafana

3)# 登录web界面 http://IP:7903/
    首次登录账号密码为admin/admin

5.2 grafana服务使用

1)# 打开设置,添加数据源。如下图1所示。
2)# 添加新的数据源,选择Prometheus,将之前部署的Prometheus服务信息添加上去。如下图2。
3)# 点击dashboard —》 import 导入ConsulManage里面ecs管理的grafana看板id,8919 。如下图3,根据提示导入完成即可。
4)# 添加完成后,重新在dashborad中选择刚刚导入的模板,就可以使用grafana查看监控到的主机信息。效果如下图4.

注意: 以上的流程完成了使用ConsulManage对自建主机监控的完成流程,包括部署prometheus服务以及node_export,后续会添加blackbox站点的监控文档,已经自定义监控视图部分。
时间: 2023年3月17日17点25分

六、自定义grafana监控视图

七、附录

7.1 prometheus 配置讲解

20180618_Git分支管里之解决冲突

Git分支管里之解决冲突

 

感谢廖雪峰老师提供的git教程:

传送门:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

 

人生不如意之事十之八九,合并分支往往也不是一帆风顺的。

 

准备新的feature1分支,继续我们的新分支开发:

 

$ git checkout -b feature1

Switched to a new branch ‘feature1‘

 

 技术分享图片

 

 

 

修改readme.txt最后一行,改为:

 

Creating a new branch is quick AND simple.

 

 技术分享图片

 

 

feature1分支上提交:

 

$ git add readme.txt
 
$ git commit -m "AND simple"
[feature1 14096d0] AND simple
 1 file changed, 1 insertion(+), 1 deletion(-)

 

 技术分享图片

 

 

 

切换到master分支:

 

$ git checkout master
Switched to branch ‘master‘
Your branch is ahead of ‘origin/master‘ by 1 commit.
  (use "git push" to publish your local commits)

 

 技术分享图片

 

 

Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。

master分支上把readme.txt文件的最后一行改为:

 

Creating a new branch is quick & simple.

 

 技术分享图片

 

 

 

提交:

 

$ git add readme.txt 
$ git commit -m "& simple"
[master 5dc6824] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)

 

 

 技术分享图片

 

 

现在,master分支和feature1分支各自都分别有新的提交,变成了这样:

 

 技术分享图片

 

 

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:

 

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

 

 

 技术分享图片

 

 

 

果然冲突了!Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:

 

$ git status
On branch master
Your branch is ahead of ‘origin/master‘ by 2 commits.
  (use "git push" to publish your local commits)
 
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)
 
Unmerged paths:
  (use "git add <file>..." to mark resolution)
 
    both modified:   readme.txt
 
no changes added to commit (use "git add" and/or "git commit -a")

 

 技术分享图片

 

 

 

我们可以直接查看readme.txt的内容:

 

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

 

 

 技术分享图片

 

 

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存:

 

Creating a new branch is quick and simple.

 

 

 技术分享图片

 

 

再提交:

 

$ git add readme.txt 
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed

 

 

 技术分享图片

 

 

现在,master分支和feature1分支变成了下图所示:

 技术分享图片

 

 

 

 

用带参数的git log也可以看到分支的合并情况:

 

$ git log --graph --pretty=oneline --abbrev-commit
*   cf810e4 (HEAD -> master) conflict fixed
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/  
* b17d20e branch test
* d46f35e (origin/master) remove test.txt
* b84166e add test.txt
* 519219b git tracks changes
* e43a48b understand how stage works
* 1094adb append GPL
* e475afc add distributed
* eaadf4e wrote a readme file

 

 技术分享图片

 

 

最后,删除feature1分支:

 

$ git branch -d feature1
Deleted branch feature1 (was 14096d0).

 

 技术分享图片

 

 

工作完成。

 

小结

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图。

 

以上是关于20230315_使用ConsulManager管理监控系列的主要内容,如果未能解决你的问题,请参考以下文章

20180618_Git分支管里之解决冲突

LED将为我闪烁:控制发光二级管

部署一个redis exporter监控所有的Redis实例

FPGA专用时钟管脚问题

[张飞硬件设计与开发视频]_课程2_听课笔记

[张飞硬件设计与开发视频]_课程2_听课笔记