步骤:
- 安装docker
- docker运行consul
- docker运行prometheus
- docker运行grafana
前提条件:
- CentOS7操作系统
- 最新版本的yum
步骤1
检查内核版本
$ uname -r
,运行docker需要内核版本在3.10以上。安装docker
$ sudo yum install -y docker
检查是否安装成功,安装成功如下
$ docker version Client: Version: 1.13.1 API version: 1.26 Package version: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
启动docker
$ sudo systemctl start docker.service
设置开机时自动启动docker
$ sudo systemctl enable docker
步骤2
docker后台运行consul,并将容器端口映射到主机8500端口。docker会自动拉取consul的镜像并运行。
$ sudo docker run --name consul -d -p 8500:8500 consul Unable to find image 'consul:latest' locally Trying to pull repository docker.io/consul ...
检查容器是否运行成功,看到如下信息,表示consul后台运行成功。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37ee3147c1f6 consul "docker-entrypoint..." 9 seconds ago Up 8 seconds 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8500->8500/tcp consul
打开网页 http://localhost:8500 可以看到如下界面
编辑服务脚本
$ vim cadvisor.json
{ "ID": "cadvisor", "Name": "prometheus-cadvisor", "Tags": [ "primary", "v1" ], "Address": "localhost", "port": 8080, "Check": { "HTTP": "http://localhost:8080/metrics", "Interval": "15s" } }
注册服务(在cadvisor.json文件夹下执行)
$ curl --request PUT --data @cadvisor.json http://localhost:8500/v1/agent/service/register
查看结果
备注:要想看到如上图Node Health都是绿色,还需docker成功运行google/cadvisor:v0.24.1删除服务
$ curl --request PUT http://localhost:8500/v1/agent/service/deregister/cadvisor
步骤3
在本地新建一个prometheus.yml文件,我是在root文件夹下建的。
$ vim prometheus.yml
文件内容如下:
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'consul-prometheus' consul_sd_configs: - server: 'localhost:8500' services: [] relabel_configs: - source_labels: ['__meta_consul_service'] regex: .*prometheus.* action: keep
备注:其中
- job_name: 'consul-prometheus'
下的内容是consul的prometheus配置。意思是在consul中注册的服务,如果名字中含有prometheus
的可以被prometheus自动监控。source_labels
regex
可以根据自己的需求进行调整。docker 运行 prometheus
$ sudo docker run --name prometheus -d -p 9090:9090 --privileged=true -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
检查运行结果,可以看到又多了一行prometheus的信息。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37ee3147c1f6 consul "docker-entrypoint..." 32 minutes a Up 32 minutes 8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0..0:8500->8500/tcp consul 355090ded434 prom/prometheus "/bin/prometheus -..." 2 days ago Up 11 seconds 0.0.0.0:9090->9090/tcp prometheus
打开网页 http://localhost:9090/targets 可以看到prometheus和consul-prometheus,说明我们的prometheus+consul服务发现已经配置成功了。
步骤4
docker运行grafana
$ sudo docker run --name grafana -d -p 3000:3000 grafana/grafana
运行成功后可以打开网页 http://localhost:3000 ,初始登陆账号密码都是
admin
配置数据源
配置dashboard,从https://grafana.com/dashboards下载相应的模板import即可,我下载的是 Docker and Host Monitoring w/ Prometheus 这个模板。最终展示结果如下。
总结
通过实践可以发现,docker运行prometheus,consul,grafana非常简单。执行$ docker ps
可以简单明了的看到四个运行的容器。配置好后,我们可以随时关闭打开他们,使用方便。
说明
- 以上都是以单机执行为例,如果涉及集群,则IP地址要和安装应用的主机IP一致。
- 如果是虚拟机运行,要想在主机上打开网页,还需关闭SELinux和防火墙。
- 例子中的grafana模板除了用到cadvisor,还有node-exporter。
- 初涉未深,有不足之处,还望各位指正,如需转载,请注明出处,谢谢!