环境:华为云服务器、ubuntu22
一、场景:使用grafana查找模板时,发现一个consulManager模板,从而引出Consul、Tensuns这些。这里简单记录一下部署及使用过程,目前仅使用其监控主机的功能和模板。
二、部署consul+tensuns,两者都是开源的。tensuns本质就是一个基于Consul的WEB运维平台。开源项目地址:starsliao/TenSunS
1.安装,推荐使用docker安装。确保已安装docker和docker-compose,一键式安装命令:
curl -s https://starsl.cn/static/img/all_install.sh|sudo bash
运行该脚本后会使用docker-compose启动TenSunS和Consul,安装路径是:/opt/tensuns,脚本运行完成后会有使用提示及自动生成登录密码。访问地址应该分别是ip:1026,ip:8500。
2.我的consul和tensuns是分开部署的,consul是直接部署,tensuns使用docker部署。
consul部署步骤可参考该文档:TenSunS/docs/Consul部署说明.md at main · starsliao/TenSunS · GitHub
ubuntu部署步骤:
2.1 下载安装包,依次执行下面三个命令:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install consul
2.2 后面是配置,操作步骤和centos基本无区别
- 执行以下命令获取UUID,填写到下面配置末尾部分,作为最高权限的token
uuidgen
- 清空
/etc/consul.d/consul.hcl
,并使用以下完整配置内容,注意advertise_addr、initial_management 、agent需要修改
data_dir = "/opt/consul"
log_level = "error"
# 服务器有多个IP启动会报错请增加这行配置:填写服务器IP。
advertise_addr = "192.168.x.x"
client_addr = "0.0.0.0"
ui_config{
enabled = true
}
ports = {
grpc = -1
https = -1
dns = -1
grpc_tls = -1
serf_wan = -1
}
peering {
enabled = false
}
connect {
enabled = false
}
server = true
bootstrap_expect=1
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
tokens {
initial_management = "生成的UUID"
agent = "生成的UUID,和上面保持一致"
}
}
启动服务
mkdir /opt/consul
chown -R consul:consul /opt/consul
sed -i 's/Type=notify/Type=exec/g' /usr/lib/systemd/system/consul.service
systemctl daemon-reload
systemctl enable consul.service
systemctl restart consul.service
验证: 访问Consul自带WEB页面
- 浏览器访问Consul的8500端口
- 使用生成的UUID登录
2.3 部署tensuns
1.新建tensuns_install_only.sh脚本,内容如下:
#!/bin/bash
tsspath="/opt/tensuns"
mkdir -p $tsspath
cat <<EOF > $tsspath/docker-compose.yaml
version: '3.6'
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:
consul_token: xxxxx-xxxxx-xxxxx
consul_url: http://x.x.x.x:8500/v1
admin_passwd: xxxxxxxx
log_level: INFO
networks:
- TenSunS
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
depends_on:
- flask-consul
networks:
- TenSunS
networks:
TenSunS:
name: TenSunS
driver: bridge
ipam:
driver: default
EOF
echo -e "\n编辑:$tsspath/docker-compose.yaml,修改3个环境变量:\n\033[31;1mconsul_token\033[0m:consul的登录token(安装consul时生成的UUID)\n\033[31;1mconsul_url\033[0m:consul的URL(http开头,/v1要保留)\n\033[31;1madmin_passwd\033[0m:登录后羿运维平台admin用户的密码\n"
echo "启动:cd $tsspath && docker-compose up -d"
echo -e "\n请使用浏览器访问 http://{你的IP}:1026 并登录使用\n"
echo -e "\033[31;1mhttp://`ip route get 1.2.3.4 | awk '{print $NF}'|head -1`:1026\033[0m\n"
2.使用bash命令执行该脚本
bash ./tensuns_install_only.sh
3.进入/opt/tensuns目录,执行docker-compose.yml文件
cd /opt/tensuns
docker-compose up -d
4.docker ps查询是否启动成功,访问ip:1026即可
注意:可能存在无法访问的情况,防火墙开放8500/1026端口。
三、自建云主机,具体实现prometheus+consul+tensuns
1.新建自建云主机,端口号保持与监控目的端主机node_exporter一致即可
2.选择服务器和系统版本生成配置,追加到prometheus.yml文件中
3. 新建recording_rules.yml作为记录规则的配置文件。这个规则是用于处理模板中【最近7天P99资源使用率】图表无数据。内容如下:
groups:
- name: node_usage_record_rules
interval: 1m
rules:
- record: cpu:usage:rate1m
expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[3m])) by (instance,vendor,account,group,name)) * 100
- record: mem:usage:rate1m
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
~
~
~
4.修改prometheus.yml文件
因为我是容器部署,所以需要挂载到容器内部中,修改docker-compose.yml文件并重新加载,需要删除旧的prometheus容器,重新运行 docker compose up -d
services:
prometheus:
image: prom/prometheus
container_name: prometheus
hostname: prometheus
restart: always
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./recording_rules.yml:/etc/prometheus/recording_rules.yml
# - ./node_down.yml:/usr/local/etc/node_down.yml:rw
ports:
- "9090:9090"
networks:
- monitor
5.重启prometheus并查看target、rules是否生效,docker restart prometheus。
6.最后的仪表盘内容如下: