SkyWalking实战:如何用Docker Compose一键部署企业级监控系统(含MySQL持久化配置)
·
SkyWalking实战:如何用Docker Compose一键部署企业级监控系统(含MySQL持久化配置)
1. 为什么选择SkyWalking作为企业监控方案?
在云原生和微服务架构盛行的今天,传统的单体监控工具已经难以满足分布式系统的观测需求。SkyWalking作为Apache顶级开源项目,凭借其独特的架构设计和丰富的功能特性,正在成为企业级监控的新标准。
核心优势对比:
| 特性 | SkyWalking | 传统监控工具 |
|---|---|---|
| 分布式追踪 | 全链路可视化 | 仅单节点监控 |
| 服务拓扑自动发现 | 动态生成 | 需手动配置 |
| 多语言支持 | Java/Go/PHP等 | 语言受限 |
| 存储扩展性 | 支持多种数据库 | 存储单一 |
| 生产环境验证 | 日均处理百亿级数据 | 规模有限 |
实际案例表明,某电商平台接入SkyWalking后:
- 故障定位时间从平均47分钟缩短至3.2分钟
- 异常告警准确率提升至92%
- 资源使用率优化节省约15%的云服务成本
2. 环境准备与Docker Compose编排
2.1 基础环境要求
确保部署主机满足:
- Docker 20.10+
- Docker Compose 2.0+
- 4核CPU/8GB内存(生产环境建议16GB+)
- 50GB可用磁盘空间(根据数据保留策略调整)
提示:在Linux环境下,建议关闭SWAP以获得更稳定的性能表现
2.2 完整docker-compose.yml配置
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: skywalking-mysql
environment:
MYSQL_ROOT_PASSWORD: skywalking123
MYSQL_DATABASE: skywalking
TZ: Asia/Shanghai
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max_connections=1000
oap:
image: apache/skywalking-oap-server:9.4.0
container_name: skywalking-oap
depends_on:
- mysql
environment:
SW_STORAGE: mysql
SW_JDBC_URL: jdbc:mysql://mysql:3306/skywalking?useSSL=false
SW_DATA_SOURCE_USER: root
SW_DATA_SOURCE_PASSWORD: skywalking123
JAVA_OPTS: -Xms4g -Xmx4g
TZ: Asia/Shanghai
volumes:
- ./config/alarm-settings.yml:/skywalking/config/alarm-settings.yml
ports:
- "11800:11800" # Agent gRPC端口
- "12800:12800" # Agent HTTP端口
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:12800/version || exit 1"]
interval: 30s
timeout: 10s
retries: 3
ui:
image: apache/skywalking-ui:9.4.0
container_name: skywalking-ui
depends_on:
oap:
condition: service_healthy
environment:
SW_OAP_ADDRESS: http://oap:12800
TZ: Asia/Shanghai
ports:
- "8080:8080"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080 || exit 1"]
interval: 30s
timeout: 5s
retries: 3
volumes:
mysql_data:
关键参数解析:
- SW_STORAGE=mysql:指定使用MySQL作为存储后端
- JAVA_OPTS:OAP服务堆内存配置,生产环境建议不低于4GB
- healthcheck:确保服务依赖顺序正确
3. MySQL持久化专项配置
3.1 数据库表结构优化
SkyWalking默认会创建87张表,建议针对核心表进行优化:
-- 执行在MySQL容器初始化后
ALTER TABLE `service_instance_relation`
MODIFY COLUMN `properties` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `segment`
ENGINE=InnoDB
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;
3.2 性能关键参数
在MySQL配置文件中添加(my.cnf):
[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON
3.3 数据保留策略
通过OAP环境变量控制数据保留周期:
environment:
SW_RECORD_DATA_TTL: 30 # 追踪数据保留天数
SW_METRICS_DATA_TTL: 60 # 指标数据保留天数
SW_CORE_PERSISTENT_PERIOD: 25 # 存储周期(分钟)
4. 生产环境调优指南
4.1 OAP服务器参数调优
environment:
SW_CORE_GRPC_CHANNEL_CHECK_INTERVAL: 30
SW_CORE_GRPC_UPSTREAM_TIMEOUT: 60
SW_CORE_RECORD_DATA_BUFFER_SIZE: 10000
SW_CORE_METRICS_DATA_BUFFER_SIZE: 10000
4.2 Agent采样策略配置
在应用启动参数中添加:
-javaagent:/path/to/skywalking-agent.jar
-Dskywalking.agent.service_name=payment-service
-Dskywalking.collector.backend_service=oap-server:11800
-Dskywalking.agent.sample_n_per_3_secs=1000 # 每3秒采样数
-Dskywalking.agent.force_sample_error_span=true # 错误强制采样
采样率建议:
- 开发环境:-1(全采样)
- 预发环境:500-1000
- 生产环境:300-500
4.3 集群部署方案
对于高可用场景,修改docker-compose.yml:
oap1:
image: apache/skywalking-oap-server:9.4.0
environment:
SW_CLUSTER: kubernetes
SW_CLUSTER_K8S_NAMESPACE: skywalking
SW_CLUSTER_K8S_LABEL: app=skywalking
SW_CLUSTER_K8S_SERVICE_NAME: skywalking-oap
oap2:
image: apache/skywalking-oap-server:9.4.0
environment:
SW_CLUSTER: kubernetes
SW_CLUSTER_K8S_NAMESPACE: skywalking
SW_CLUSTER_K8S_LABEL: app=skywalking
SW_CLUSTER_K8S_SERVICE_NAME: skywalking-oap
5. 告警与集成实践
5.1 告警规则配置示例
修改config/alarm-settings.yml:
rules:
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 2
silence-period: 5
message: 服务 {name} 平均响应时间超过1秒
service_error_rate_rule:
metrics-name: service_error_rate
threshold: 0.2
op: ">"
period: 5
count: 1
message: 服务 {name} 错误率超过20%
5.2 Webhook集成示例
webhooks:
- url: http://alert-service:8080/api/alerts
secret: your_secure_token
5.3 与Prometheus集成
在OAP环境变量中添加:
SW_TELEMETRY: prometheus
SW_PROMETHEUS_FETCHER_ENABLED: true
SW_PROMETHEUS_FETCHER_CONFIG_PATH: /skywalking/config/prometheus-rules.yaml
6. 故障排查与维护
6.1 常见问题处理
数据采集异常:
- 检查Agent日志:logs/skywalking-api.log
- 验证网络连通性:telnet oap-server 11800
- 检查OAP服务状态:http://oap:12800/version
存储空间优化:
-- 定期执行归档
DELETE FROM segment WHERE time_bucket < DATE_SUB(NOW(), INTERVAL 30 DAY);
OPTIMIZE TABLE segment;
6.2 性能监控指标
关键监控项:
- OAP JVM内存使用率
- MySQL连接数
- 存储写入延迟
- 网络I/O吞吐量
推荐Grafana仪表盘ID:13145(SkyWalking官方模板)
7. 高级特性应用
7.1 日志关联追踪
在logback-spring.xml中添加:
<appender name="SKYWALKING" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"/>
<logger name="com.your.package" level="DEBUG">
<appender-ref ref="SKYWALKING"/>
</logger>
7.2 自定义追踪点
在代码中添加注解:
@Trace(operationName = "processPayment")
public PaymentResult process(PaymentRequest request) {
// 业务逻辑
ActiveSpan.tag("payment_amount", request.getAmount());
ActiveSpan.error(new RuntimeException("Payment failed"));
}
7.3 服务网格集成
对于Istio服务网格,添加Mixer适配器:
apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
name: skywalking
namespace: istio-system
spec:
compiledAdapter: skywalking
params:
backend_address: skywalking-oap:11800
更多推荐
所有评论(0)