aster Server 提供完整的 Prometheus metrics 支持,用于监控应用性能和业务指标。
config := &server.Config{
Observability: server.ObservabilityConfig{
Enabled: true,
Metrics: server.MetricsConfig{
Enabled: true,
Endpoint: "/metrics",
},
},
}
srv, _ := server.New(config, deps)
srv.Start()
curl http://localhost:8080/metrics
aster_http_requests_total{method="GET",path="/v1/agents",status="2xx"}
aster_http_request_duration_seconds{method="GET",path="/v1/agents"}
aster_http_request_size_bytes{method="POST",path="/v1/agents"}
aster_http_response_size_bytes{method="GET",path="/v1/agents"}
aster_agents_total
aster_sessions_active
aster_workflows_running
自动包含标准 Go metrics:
go_goroutines - Goroutine 数量go_threads - OS 线程数量go_memstats_alloc_bytes - 已分配内存go_memstats_sys_bytes - 系统内存go_gc_duration_seconds - GC 延迟process_cpu_seconds_total - CPU 使用时间process_resident_memory_bytes - 常驻内存// 在 Handler 中更新指标
func (h *AgentHandler) Create(c *gin.Context) {
// 创建 agent...
// 更新指标
if h.metrics != nil {
count := getAgentCount() // 获取总数
h.metrics.SetAgentsTotal(float64(count))
}
}
import "github.com/prometheus/client_golang/prometheus"
// 创建自定义指标
customCounter := prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: "aster",
Name: "custom_operations_total",
Help: "Total custom operations",
},
)
// 注册
prometheus.MustRegister(customCounter)
// 使用
customCounter.Inc()
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "aster"
static_configs:
- targets: ["localhost:8080"]
metrics_path: "/metrics"
version: "3.8"
services:
aster:
image: aster:latest
ports:
- "8080:8080"
environment:
- OBSERVABILITY_METRICS_ENABLED=true
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- "--config.file=/etc/prometheus/prometheus.yml"
dashboards/aster.jsonHTTP Performance
Business Metrics
System Resources
rate(aster_http_requests_total[5m])
histogram_quantile(0.99,
rate(aster_http_request_duration_seconds_bucket[5m])
)
rate(aster_http_requests_total{status="5xx"}[5m])
/
rate(aster_http_requests_total[5m])
rate(aster_http_response_size_bytes_sum[5m])
/
rate(aster_http_response_size_bytes_count[5m])
groups:
- name: aster
rules:
# 高错误率告警
- alert: HighErrorRate
expr: |
rate(aster_http_requests_total{status="5xx"}[5m])
/
rate(aster_http_requests_total[5m])
> 0.05
for: 5m
labels:
severity: warning
annotations:
summary: "High error rate detected"
description: "Error rate is {{ $value | humanizePercentage }}"
# 高延迟告警
- alert: HighLatency
expr: |
histogram_quantile(0.99,
rate(aster_http_request_duration_seconds_bucket[5m])
) > 1.0
for: 5m
labels:
severity: warning
annotations:
summary: "High latency detected"
description: "p99 latency is {{ $value }}s"
# 高内存使用告警
- alert: HighMemoryUsage
expr: |
process_resident_memory_bytes > 1e9
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage"
description: "Memory usage is {{ $value | humanize }}B"
遵循 Prometheus 命名约定:
_total_seconds_bytes检查配置:
config.Observability.Metrics.Enabled = true
检查端点:
curl http://localhost:8080/metrics
确保中间件已注册:
if s.metrics != nil {
s.router.Use(s.metrics.Middleware())
}