基于docker搭建监控系统&日志收集

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

访问http://ip:9100/metrics

如下就是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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容