19.1.4 核心组件与集成方式
围绕运维平台化的核心组件与集成方式,应构建统一服务底座与可扩展能力框架,确保资源、配置、自动化、监控、日志与发布通过标准接口与统一流程协同。核心组件包括:CMDB资产管理、配置与密钥服务、任务编排与作业平台、监控告警与指标体系、日志与链路追踪、发布与变更管理、权限与审计、工单与流程引擎、消息与事件总线、服务注册与发现。
统一集成策略强调“统一入口 + 统一模型 + 统一身份”。统一入口通过 API 网关与前端门户承载;统一模型通过标准资源模型与业务标签体系对齐数据;统一身份通过 SSO 与 RBAC 将权限与审计打通。对外集成以标准 API/SDK、Webhook、消息队列为主,对内以事件驱动与异步任务为主。
核心组件与集成方式:示例与操作#
1) 资产与配置集成(CMDB + 配置中心)#
目标:CMDB 与配置中心双向同步,配置变更触发自动化作业与审计。
示例(基于 Nacos 作为配置中心,演示配置变更回调作业)
1. 部署 Nacos(单机)
# 安装依赖
sudo yum -y install java-1.8.0-openjdk
# 下载并启动
wget https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz
tar -zxvf nacos-server-2.2.3.tar.gz -C /opt/
cd /opt/nacos/bin
# 单机启动
./startup.sh -m standalone
# 验证
curl -s http://127.0.0.1:8848/nacos/ | head -n 1
- 向 Nacos 写入配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs" \
-d "dataId=app.yaml&group=DEFAULT_GROUP&content=app_name:demo\nlog_level:info"
- 模拟配置变更触发自动化作业(Webhook -> 作业平台)
# webhook 接收器(模拟作业平台入口)
cat > /opt/webhook.py <<'PY'
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def hook():
payload = request.json
print("收到配置变更:", payload)
# 这里对接作业平台API(示例输出)
return "ok", 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=9000)
PY
pip install flask
python /opt/webhook.py
排错要点
- Nacos 访问失败:检查 8848 端口、防火墙、Java 版本。
- 配置写入失败:确认 dataId、group 参数,检查 Nacos 日志 /opt/nacos/logs/nacos.log。
练习
- 将 CMDB 主机信息映射成 Nacos 配置(dataId=hostlist.json),并触发 webhook 回调。
2) 自动化与发布(作业平台 + 流水线)#
目标:作业平台与发布系统通过流水线编排,结合审批与回滚。
示例:用 Jenkins Pipeline 触发 Ansible 作业
pipeline {
agent any
stages {
stage('拉取配置') {
steps {
sh 'git clone https://example.com/config-repo.git'
}
}
stage('发布应用') {
steps {
sh '''
ansible -i inventory.ini app -m shell -a "systemctl restart demo"
'''
}
}
}
post {
failure {
mail to: 'ops@example.com', subject: '发布失败', body: '请检查日志'
}
}
}
命令解释
- ansible -i inventory.ini app -m shell -a "...":对 app 组执行命令。
排错要点
- Ansible 连接失败:确认 SSH 免密、inventory.ini 中主机可达。
- Jenkins 执行失败:检查节点权限与插件版本。
练习
- 增加回滚步骤:当发布失败时自动执行 systemctl restart demo@previous。
3) 监控与告警(Prometheus + 告警中心)#
目标:Prometheus、日志系统、链路追踪统一对接告警中心与工单系统。
示例:安装 Prometheus + Node Exporter
# 安装 Node Exporter
useradd -r -s /sbin/nologin node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -zxvf node_exporter-1.7.0.linux-amd64.tar.gz -C /opt/
ln -s /opt/node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/node_exporter
cat > /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now node_exporter
# 安装 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.49.1/prometheus-2.49.1.linux-amd64.tar.gz
tar -zxvf prometheus-2.49.1.linux-amd64.tar.gz -C /opt/
cat > /opt/prometheus-2.49.1.linux-amd64/prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["127.0.0.1:9100"]
EOF
/opt/prometheus-2.49.1.linux-amd64/prometheus \
--config.file=/opt/prometheus-2.49.1.linux-amd64/prometheus.yml
告警规则示例
# /opt/prometheus-2.49.1.linux-amd64/alert.yml
groups:
- name: host_alerts
rules:
- alert: HostCPUHigh
expr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.8
for: 2m
labels:
severity: critical
annotations:
summary: "CPU使用率过高"
description: "CPU>80% 持续2分钟"
排错要点
- Prometheus 无数据:检查目标 :9100/metrics 是否可访问。
- 告警未触发:确认规则文件已加载、时间窗口匹配。
练习
- 添加 Redis Exporter 并在 Prometheus 中采集 redis_up 指标。
4) 容器与资源编排(Docker + Kubernetes)#
目标:容器平台纳入统一资源视图与权限体系。
示例:Docker 安装与基础验证
sudo yum -y install yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
docker run --rm hello-world
示例:Kubernetes 基本健康检查
kubectl get nodes
kubectl get pods -A
排错要点
- Docker 启动失败:查看 journalctl -u docker。
- K8s 节点 NotReady:检查 kubelet 状态与容器运行时。
练习
- 使用 kubectl apply -f 部署一个 Nginx,并设置 NodePort 暴露端口。
5) 中间件统一纳管(MySQL/Nginx/Redis/Kafka/ZK/Nacos/HAProxy/ProxySQL)#
目标:通过标准运维 API、Exporter 与模板化脚本纳入统一监控与自动化管理。
示例:MySQL Exporter 采集
# 安装 mysqld_exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.15.0.linux-amd64.tar.gz -C /opt/
ln -s /opt/mysqld_exporter-0.15.0.linux-amd64/mysqld_exporter /usr/local/bin/mysqld_exporter
cat > /etc/.mysqld_exporter.cnf <<'EOF'
[client]
user=exporter
password=exporter_pass
host=127.0.0.1
EOF
/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/.mysqld_exporter.cnf
示例:Nginx 基础健康检查脚本
cat > /opt/nginx_check.sh <<'EOF'
#!/bin/bash
URL="http://127.0.0.1:80"
code=$(curl -s -o /dev/null -w "%{http_code}" $URL)
if [ "$code" != "200" ]; then
echo "Nginx异常: $code"
exit 1
fi
echo "Nginx正常"
EOF
chmod +x /opt/nginx_check.sh
/opt/nginx_check.sh
排错要点
- Exporter 无指标:检查账号权限(SELECT, PROCESS, REPLICATION CLIENT)。
- Nginx 无响应:检查端口监听 ss -lntp | grep :80。
练习
- 为 Redis 增加 redis_exporter,并在 Prometheus 中配置采集。
6) 安全与合规(权限中心 + 审计 + 堡垒机)#
目标:形成操作全链路可追溯。
示例:审计日志统一格式(JSON)
{
"user": "ops_user",
"action": "restart_service",
"target": "host01",
"service": "nginx",
"result": "success",
"time": "2024-03-20T10:05:00Z"
}
排错要点
- 审计缺失:检查 API 网关日志与作业平台回调是否开启。
- 权限错误:核对 RBAC 角色与资源标签。
练习
- 为关键操作(如数据库重启)加入二次审批并记录工单号。
集成方式关键原则与验证#
- 接口设计:幂等、重试、超时、熔断。
- 数据传递:事件总线或变更日志,避免点对点耦合。
- 验证方式:演练事件触发 -> 作业执行 -> 告警闭环 -> 审计落库。
综合演练
1. 在 Nacos 修改配置。
2. Webhook 触发作业平台执行 Nginx 重载。
3. Prometheus 检测指标波动并告警。
4. 工单自动生成,审计记录落库。