WeOps Proxy

0x00 组件介绍

WeOps-Proxy是WeOps开源的监控组件,封装了Grafana Agent和IPMI Exporter,提供跨网络区域的snmp和ipmi监控采集能力。

采集交互过程如下图:

0x01 安装部署

前置动作:WeOps Proxy 使用 consul 来进行数据同步,为了不影响蓝鲸平台的 consul,一般需要单独在蓝鲸服务器上部署一套单独的 consul,仅使用 kv 能力。在非高可用架构下,consul,weops-proxy 默认安装在蓝鲸的 APPT 服务器上

## 中控机操作
cat <<EOF > /data/install/bin/04-final/weops.env
WEOPS_CONSUL_KEYSTR_32BYTES=$(consul keygen)
EOF

/data/install/bkcli install bkenv
/data/install/bkcli sync common

---
## APPT 服务器操作
docker run -d \
   --restart=always \
   -v /data/weops/proxy/:/consul/data \
   --net=host \
   --name=weops-consul \
   -e CONSUL_HTTP_ADDR=http://127.0.0.1:8501 \
  docker-bkrepo.cwoa.net/ce1b09/weops-docker/consul:latest agent -server -bootstrap-expect=1 -encrypt="${WEOPS_CONSUL_KEYSTR_32BYTES}" -client=127.0.0.1 -server-port=8603 -serf-wan-port=8602 -serf-lan-port=8601 -http-port=8501 -bind=${LAN_IP}

---
## 在 appo 服务器操作和所有的 weops-proxy 节点操作 (APPT 除外)
source /data/install/load_env.sh
docker run -d \
   --restart=always \
   --net=host \
   --name=weops-consul-client \
   -e CONSUL_HTTP_ADDR=http://127.0.0.1:8501 \
  docker-bkrepo.cwoa.net/ce1b09/weops-docker/consul:latest agent -client=127.0.0.1 -server-port=8603 -serf-wan-port=8602 -serf-lan-port=8601 -http-port=8501 -bind=${LAN_IP} -join ${BK_APPT_IP} -encrypt="${WEOPS_CONSUL_KEYSTR_32BYTES}"

---

1、WEOPS_PROXY_CLIENT_HOST 更新为 127.0.0.1
2、重新部署 weops saas

部署 weops proxy,推荐使用docker方式部署,部署脚本如下:

#!/bin/bash
source /data/install/utils.fc
mkdir -p /data/weops/proxy/
chown -R 1001:1001 /data/bkce/logs/weopsproxy
docker run -d --net=host --restart=always --name=weops-proxy \
-e CONSUL_ADDR=${BK_APPT_IP}:8501 \
-e REMOTE_URL=http://admin:admin@${BK_APPT_IP}:9093/api/v1/write \
-v /data/bkce/logs/weopsproxy:/app/log \
docker-bkrepo.cwoa.net/ce1b09/weops-docker/weopsproxy:1.0.4

在拉起服务后,需要手动初始化接入点,脚本如下:

#!/bin/bash
source /data/install/utils.fc
proxy_url="http://${BK_APPT_IP}:8501/v1/kv/weops/access_points/default"
req=$(cat << EOF
{
 "ip":"${BK_APPT_IP}",
 "name":"默认区域采集节点",
 "zone":"default",
 "port": 8089
}
EOF
)
# 单独写入access_points的key path
curl --request PUT http://${BK_APPT_IP}:8501/v1/kv/weops/access_points/
# 注册default接入点
curl --request PUT --data "$(jq -r <<<$req)" $proxy_url

检查服务状态:

docker exec -it weops-proxy sh -c "supervisorctl -c /app/config/supervisord.conf status all"

预期为四个进程都是启动状态,如下

0x02 组件详解

WeOps Proxy包括五个进程,其中supervisor用于托管其他进程,其他4个进程用途如下:

进程名用途日志
consul-template从consul获取采集任务的配置,并对进程进行reload/data/bkce/logs/weopsproxy/consul-template.out.log
grafana-agent暴露snmp的指标,监听http://127.0.0.1:12345/data/bkce/logs/weopsproxy/grafana-agent.out.log
ipmi暴露ipmi的指标,监听http://127.0.0.1:9290/data/bkce/logs/weopsproxy/ipmi.out.log
grafana-agent-flow执行采集&数据清洗,将数据传输到Prometheus,监听http://127.0.0.1:1234/data/bkce/logs/weopsproxy/grafana-flow.out.log

在启动WeOps Proxy时指定了两个环境变量:

变量名说明
CONSUL_ADDRproxy获取配置的consul地址。默认为APPT服务器的8501端口
REMOTE_URLremotewrite到Prometheus的地址,默认为APPT服务器的9093端口(需要在url中添加basic auth)

0x03 常见问题与排查思路

  1. 日志目录权限异常,现象为supervisor看不到

这个问题一般是由于uid为1001的用户没有挂载的/data/bkce/logs/weopsproxy目录权限导致的。

chown -R 1001:1001 /data/bkce/logs/weopsproxy

然后

docker exec -it weops-proxy sh -c "supervisorctl -c /app/config/supervisord.conf reload

即可

  1. snmp采集失败

在appt的服务器使用snmpwalk验证目标snmp是否能正常访问

snmpwalk -v2c -c {团体字} {ip} 1.3.6.1

确认能正常访问后,将proxy的1234端口代理出来,

server {
   listen 80;
   server_name flow.weops.com;

   location / {
       proxy_pass http://${BK_APPT_IP}:1234;
  }
}

并配置hosts,访问flow.weops.com,在页面找到目标任务,查看Debug Info信息

查看last_error后,复制url,在APPT上手动curl查看结果,结合grafana.out.log排查更多错误信息。

  1. ipmi采集失败

与snmp相同,先在weops-proxy的容器中运行

ipmi-sel -h {服务器ip} -u {用户名} -p {密码} -D LAN_2_0

正常可以看到输出大量的ipmi指标

如果确认ipmi-sel可以正常获取数据后,granfa flow页面显示500,可以尝试重启ipmi exporter。

0x04 Proxy的多云区域部署

在需要跨网段进行采集时,可部署多个proxy进行采集,网络要求如下:

目标端口用途是否双向
proxy 服务器蓝鲸的 APPT 服务器9093, 8501, 8200, 8089监控数据传输
proxy 服务器蓝鲸的 redis 服务器6379任务数据获取

proxy服务器要求已安装docker,已导入weops-proxy镜像/可以访问到有proxy镜像的仓库且已安装蓝鲸环境变量

#!/bin/bash
# 此脚本可以在任意蓝鲸服务器上执行,依赖uuid和jq命令
export ZONE=$(uuid)
export ACCESS_POINT_NAME="要注册的接入点名称,可自由命名如:广州园区核心网"
export ACCESS_POINT_IP="接入点IP,如10.10.0.1"
# 以上变量需手动填写
​
ok "zone uuid=${ZONE}"
​
req=$(cat << EOF
{
  "ip":"${ACCESS_POINT_IP}",
  "name":"${ACCESS_POINT_NAME}",
  "zone":"${ZONE}"
  "port":8089
}
EOF
)
​
ok $req
proxy_url="http://${BK_APPT_IP}:8501/v1/kv/weops/access_points/${ZONE}"
curl --request PUT --data "$(jq -r <<<$req)" $proxy_url
​
ok "get ${ZONE}_access_ponit"
curl --request GET $proxy_url | jq -r .[].Value|base64 -d

需要记录执行此脚本后输出的uuid,然后在新的服务器执行

## 新建 weops proxy
#!/bin/bash
source /data/install/utils.fc
mkdir -p /data/weops/proxy/
chown -R 1001:1001 /data/bkce/logs/weopsproxy
docker run -d --net=host --restart=always --name=weops-proxy \
-e CONSUL_ADDR=${BK_APPT_IP}:8501 \
-e REMOTE_URL=http://admin:admin@${BK_APPT_IP}:9093/api/v1/write \
-e ZONE=${ZONE的uuid}
-v /data/bkce/logs/weopsproxy:/app/log \
docker-bkrepo.cwoa.net/ce1b09/weops-docker/weopsproxy:1.0.4


## 新建 automate,请自行替换所需变量
# 注意 celery broker 不可重复
# paas 地址需要填写域名形式且采用 http
# access point 需填写和接入点一致的 ip
# 添加 paas 的 hosts 解析

export APP_AUTH_TOKEN=$( mysql -uroot -p$BK_MYSQL_ADMIN_PASSWORD --socket=/var/run/mysql/default.mysql.socket -BNe "select auth_token from open_paas.paas_app where code='weops_saas';" )

docker run -d --restart=always --net=host \
-e APP_PORT=8089 \
-e CELERY_BROKER=redis://:${BK_REDIS_ADMIN_PASSWORD}@${BK_REDIS_IP}:6379/1 \
-e CELERY_BACKEND=redis://:${BK_REDIS_ADMIN_PASSWORD}@${BK_REDIS_IP}:6379/14 \
-e VAULT_URL=http://${BK_APPT_IP}:8200 \
-e VAULT_TOKEN=${VAULT_ROOT_TOKEN} \
-e REDIS_URL=redis://:${BK_REDIS_ADMIN_PASSWORD}@${BK_REDIS_IP}:6379/14 \
-e WEOPS_PATH=http://DOMAIN/o/weops_saas \
-e PROMETHEUS_RW_URL=http://${BK_APPT_IP}:9093/api/v1/write \
-e PROMETHEUS_USER=admin \
-e PROMETHEUS_PWD=admin \
-e ACCESS_POINT_URL=$(hostname -I|awk '{print $1}'):8089 \
-e ENABLE_OTEL=false \
-e BK_PAAS_HOST=http://DOMAIN \
-e WEOPS_APP_ID=weops_saas \
-e WEOPS_APP_TOKEN=${APP_AUTH_TOKEN} \
-v /data/bkce/logs/automate:/app/logs \
--name=auto-mate docker-bkrepo.cwoa.net/ce1b09/weops-docker/auto-mate:v1.0.21-fix1

暂无评论

发送评论 编辑评论


				
上一篇
下一篇