Prometheus(普罗米修斯)是一个名字非常酷的开源监控系统。
它支持多维度的指标数据模型,服务端通过HTTP协议定时拉取数据后,通过灵活的查询语言,实现监控的目的。
如上图,客户端记录相关指标数据,对外提供查询接口。Prometheus服务端通过服务器发现机制找到客户端,并定时抓取存储为时间序列数据。最后通过Grafana等图表工具集成展示。
prometheus也提供了Grok exporter等工具可以用来读取日志,但是prometheus是监控系统,不是日志系统。应用的日志还是应该走ELK等工具栈。
- - job_name: 'consul' consul_sd_configs: - server: '192.168.1.248:8500' relabel_configs: - source_labels: [__meta_consul_service] regex: .*,prometheus.* target_label: job metrics_path: '/prometheus'
- <!-- The client -->
- <dependency>
- <groupId>io.prometheus</groupId>
- <artifactId>simpleclient</artifactId>
- </dependency>
- <!-- Exposition servlet-->
- <dependency>
- <groupId>io.prometheus</groupId>
- <artifactId>simpleclient_servlet</artifactId>
- </dependency>
- <dependency>
- <groupId>io.prometheus</groupId>
- <artifactId>simpleclient_spring_boot</artifactId>
- </dependency>
- spring.metrics.servo.enabled: false
Prometheus可以通过nginx-lua-prometheus这个库对nginx进行埋点。
使用起来也非常简单:
- lua_shared_dict prometheus_metrics 10M;
- lua_package_path "/path/to/nginx-lua-prometheus/?.lua";
- init_by_lua '
- prometheus = require("prometheus").init("prometheus_metrics")
- metric_requests = prometheus:counter(
- "nginx_http_requests_total", "Number of HTTP requests", {"host", "status"})
- metric_latency = prometheus:histogram(
- "nginx_http_request_duration_seconds", "HTTP request latency", {"host"})
- metric_connections = prometheus:gauge(
- "nginx_http_connections", "Number of HTTP connections", {"state"})
- ';
- log_by_lua '
- local host = ngx.var.host:gsub("^www.", "")
- metric_requests:inc(1, {host, ngx.var.status})
- metric_latency:observe(ngx.now() - ngx.req.start_time(), {host})
- ';
但是,通过基准测试,发现使用了histogram类型的指标后,吞吐量会有5%-10%左右的降低。
借助Prometheus,我们可以快速搭建一个业务监控系统,同时还能增加核心应用的监控手段。丰富我们的监控渠道,配合zabbix、zipkin、ELK、Grafana等工具,让你全方位掌控你的系统。
相关资料:
https://prometheus.io/
https://github.com/knyar/nginx-lua-prometheus
来源: http://www.cnblogs.com/lazio10000/p/7773571.html