prometheus 是一个开源的系统监控和告警的工具包,其采用pull方式采集时间序列,经过http协议传输。java
每一个应用都经过javaagent向外提供一个http服务暴露出本身的JMX信息。当应用启动的时候就会向consul注册服务,注册成功后,prometheus就能把这个应用加入监控对象列表,进行数据收集并跟踪服务的状态。node
官网下载prometheus-1.2.1.linux-amd64.tar.gz, 解压到/services/apps/
目录下,修改配置文件 prometheus.yml,在 scrape_config节点下增长如下内容:linux
- job_name: 'consul-node' consul_sd_configs: - server: 'localhost:8500' services: ['scorer','file-proxy','....']
services若是不配置默认会显示出全部的服务,包含了consul agent服务。git
运行,默认端口9090github
./prometheus -config.file=prometheus.yml &
jmx exporter是prometheus和JMX的桥梁。 在咱们的工程里面,它是以Java Agent的方式运行,它的功能是收集本地的JVM信息,并经过HTTP服务暴露出来。引用的方式为:面试
1. 在pom.xml中增长依赖架构
先把修改好的exporter jar(已经把consul的服务注册功能整合进去)给传到本地nexus上去,而后在maven中增长相应以来。app
<repository> <id>repo.mxnt.com</id> <name>Maxent Repository</name> <url>http://supervisor:8081/nexus/content/repositories/public</url> </repository>
<dependency> <groupId>io.prometheus</groupId> <artifactId>jmx_prometheus_javaagent</artifactId> <version>0.7</version> </dependency>
2. 增长启动参数maven
-javaagent:${WORK_DIR}/lib/jmx_prometheus_javaagent-0.7.jar=scorer:1234:${WORK_DIR}/bin/scorer.yaml
javaagent参数解释以下:工具
-javagent:path/agent.jar=serviceName:servicePort:path/conf.yaml
service 指的是http service,如指定servicePort为1234,在应用启动以后,能够在http://host:1234/metrics
获取到metrics信息。在conf.yaml里配置JMX的收集策略,完整的yaml配置。
prometheus能够静态的配置监控对象,也能够采用动态的服务发现机制。为了部署更方便,咱们采用的是如今更为流行的服务发现解决方案consul。其只包含了一个二进制的命令文件,把它拷贝到PATH( echo $PATH 能够查看
)就能够运行。 运行命令为:
consul agent -server -data-dir data &
解释以下:
consul agent 启动一个consul agent进程。 该进程负责维护集群成员信息、注册服务、运行检查、查询响应等等。并且,consul集群的每个节点上都必须有agent进程运行。
-server **agent有两种模式:server与client。**server模式包含了一致性的工做:保证一致性和可用性(在部分失败的状况下),响应RPC,同步数据到其余节点代理。client 模式用于与server进行通讯,转发RPC到服务的代理agent,它仅保存自身的少许一些状态,是很是轻量化的东西。自己是相对无状态的。
-data-dir 指定一个文件夹用于存储该agent的状态,在以server模式运行时,尤为重要。
一些其余的可选参数
consul 运行起来后,server会经过8500端口与prometheus通讯。
下图是服务启动后,在prometheus里展现的一些信息。
参见prometheus官网提供的查询表达式,简而言之,标签过滤用{},时间范围选择用[],以下例。
http_request_total{job="prometheus"}[5m]
能够在开发环境搭建的prometheus上面试手
prometheus官方的dashboard不怎么给力,目前将grafana集成了进去。grafana能够自定义数据源,而且保存多个dashboard,针对不一样的系统可使用不一样的dashboard来进行监控。最后贴一个效果图。