Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
Prometheus的特点
多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。
监控系统架构图
拉取镜像
docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana
启动node-exporter
docker run -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter
如下就是node-exporter作为agent收集到的可展示数据。
启动prometheus
新建目录prometheus,编辑配置文件prometheus.yml
mkdir /opt/prometheus cd /opt/prometheus/ vi prometheus.yml
编辑配置文件
global: scrape_interval: 60s evaluation_interval: 60s scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] labels: instance: prometheus - job_name: linux static_configs: - targets: ['ip:9100'] labels: instance: localhost
注意:修改IP地址,这里的ip就是本机地址
启动prometheus
docker run -d -p 10050:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
等待几秒查询端口状态
netstat -anpt
访问url
http://ip:10050/graph
访问targets,url如下:
http://ip:10050/targets
启动grafana
$ docker run -d -p 10051:3000 --name=grafana -e "GF_SERVER_ROOT_URL=http://grafana.server.name" -e "GF_SECURITY_ADMIN_PASSWORD=admin" grafana/grafana
访问首页
http://ip:10051 admin admin
添加数据源
监测服务器负载配置
create->import填入8919模板引擎,选择prometheus数据源,就能加载出服务器负载到主页
监控主页
Loki聚合日志集成至grafana搭建
Loki简介
Loki的第一个稳定版本于2019年11月19日发布,是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
Loki 由以下3个部分组成:
loki
是主服务器,负责存储日志和处理查询。promtail
是代理,负责收集日志并将其发送给 loki 。Grafana
用于 UI 展示。
相对于ELk对于小团队来说还是过于笨重,没有loki来的轻量,所以出于多方便考虑,小编还是选择了loki作为日志收集。
1、docker安装loki
1.1创建loki配置文件挂载目录
mkdir -p /opt/data/loki && cd /opt/data/loki
1.2下载配置文件模板
sudo wget https://raw.githubusercontent.com/grafana/loki/v2.0.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml sudo wget https://raw.githubusercontent.com/grafana/loki/v2.0.0/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
如果下载失败可去github复制
https://github.com/grafana/loki/blob/v2.0.0/cmd/promtail/promtail-docker-config.yaml https://github.com/grafana/loki/blob/master/cmd/loki/loki-docker-config.yaml
1.3启动&pull loki容器&promtail容器
docker run -d --name loki --restart always -v /opt/data/loki:/mnt/config -p 9200:3100 grafana/loki:latest -config.file=/mnt/config/loki-config.yaml
拉取promtail
docker run -d --name promtail --restart always -v /opt/data/loki:/mnt/config -v /opt/e2e/log:/var/log grafana/promtail:latest -config.file=/mnt/config/promtail-config.yaml
配置promtail配置文件
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://ip:9200/loki/api/v1/push scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/** #扫描挂载目录下所有得log文件
添加loki监控数据源
查看日志
Alerting 报警配置
docker cp grafana:/etc/grafana/grafana.ini /opt/data/grafana/grafana.ini #将镜像中得grafana配置文件复制下来配置邮件
找到邮件配置
#################################### SMTP / Emailing ########################## [smtp] enabled = true host = smtp.163.com:25 user =xxx@163.com # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" password =xxxx ;cert_file = ;key_file = skip_verify = true from_address = xxx@163.com from_name = xxx # EHLO identity in SMTP dialog (defaults to instance_name) ;ehlo_identity = dashboard.example.com # SMTP startTLS policy (defaults to 'OpportunisticStartTLS') ;startTLS_policy = NoStartTLS
打开alerting报警
#################################### Alerting ############################ [alerting] # Disable alerting engine & UI features ;enabled = true # Makes it possible to turn off alert rule execution but alerting UI is visible execute_alerts = true
将grafana配置文件复制进容器,再重启容器
docker cp /opt/data/grafana/grafana.ini grafana:/etc/grafana/grafana.ini
配置Alerting服务
监控docker容器运行情况
安装docker监控agent
docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=9300:8080 --detach=true --name=cadvisor google/cadvisor:latest
在prometheus配置文件中增加监听项
- job_name: 'docker' static_configs: - targets: ['ip:9300']
生成图表
至此基于docker搭建的监控系统以及日志收集就完成了,还可以扩展更多的内容到Grafana。