Skip to content

使用grafana来制作的一个简单好用的监控系统

License

Notifications You must be signed in to change notification settings

bigpigeon/docker-easy-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

引言

这是一个可定制的监控系统,目的就是为了让大家可以有针对性的对数据进行监控

该监控后台使用grafana,配置表格非常简单,只需简单一个sql语句即可,并且佩带sql语法补全,所以也不用当心忘记忘记字段名

数据库用的是influxdb,用来收集日志非常好用,在插入时就自动带上时间轴

开始

前置条件

  • 安装最新版的docker和docker-compose

  • root环境或者root下执行docker的环境

安装

  1. 进入项目根目录

     cd docker-easy-monitor
    
  2. 复制custom-compose.yml.temp到custom-compose.yaml并修改其中的环境变量

     cp custom-compose.yml.temp custom-compose.yaml
    
  3. 进入项目根目录,执行以下脚本拉取镜像

     ./boot.sh pull
    
  4. (可以跳过)导入grafana的配置文件,放入项目根目录下grafana中(以后考虑做成app的形式)

     scp -r ftp@you-archive-server:/your/grafana/dir grafana
    
  5. 启动项目

     ./boot.sh up -d
    
  6. 在浏览器访问grafana,并用帐号名admin刚才设置的密码环境变量GF_SECURITY_ADMIN_PASSWORD登录,

    http://your-server-name:3000

grafana监控设置

使用http请求创建一个demo数据库

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE demo"

往influxdb插入几条测试数据

curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.61 1490166326000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.75 1490166386000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.77 1490166446000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.52 1490166506000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.3 1490166566000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.25 1490166626000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.62 1490166686000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.53 1490166746000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.42 1490166806000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.9 1490166866000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.82 1490166926000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server01,region=us-west value=0.77 1490166986000000000'

curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.061 1490166326000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.075 1490166386000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.077 1490166446000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.052 1490166506000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.03 1490166566000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.025 1490166626000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.062 1490166686000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.053 1490166746000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.042 1490166806000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.09 1490166866000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.082 1490166926000000000'
curl -i -XPOST 'http://localhost:8086/write?db=demo' --data-binary 'server-load-average,host=server02,region=us-west value=0.077 1490166986000000000'

在grafana创建一个连向influxdb的数据源,Type选influxdb,Url填http://influx:8086 Database填demo

在grafana创建一个dashboard

  1. 点击ADD ROW,创建一个Graph,点击标题进入编辑模式,点击edit开始编辑图表

  2. 进入Metrics标签页,点击Add query增加一个查询,在A和B查询填入以下内容

    SELECT mean("value") FROM "server-load-average" WHERE "host" = 'server01' AND $timeFilter GROUP BY time(1m) fill(null) SELECT mean("value") FROM "server-load-average" WHERE "host" = 'server02' AND $timeFilter GROUP BY time(1m) fill(null)

  3. 编辑完成回到主页面,点击右上角的时间信息,在Time Range中选择From:2017-03-22 15:05:00 to: 2017-03-22 15:16:45 点击Apply

influxdb收集日志

我们可以用http请求来向influxdb写入一条数据,象下面这条请求这样

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'

这时influxdb就会在mydb数据库中自动创建一个cpu_load_short的表,以host,region作为索引字段 value作为普通字段 2015-06-11T20:46:02为时间字段

下面就是插入格式是的格式, 其中measurement相当于表名. tag,field分表表示索引字段普通字段 时间戳必须是以整数形式表示

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

在插入数据时不存在的表,字段会自动创建,所以不用当心插入不存在的字段导致错误的问题(如果时间字段不存在就会用当前时间填充)

influxdb的数据类型

key的类型只能是字符串(包货tag-key和field-key)

field的类型有4种,整数类型/浮点数类型/布尔类型/字符串类型

# integer value
cpu_value=1i

# float value
cpu_load value=1

cpu_load value=1.0

cpu_load value=1.2

# boolean value
error fatal=true

# string value
event msg="logged out"

influxdb安全验证

  1. 切换到need_auth分支,可以看到http.auth-enabled和admin.enabled都设为true

    vim conf/influxdb.conf

[admin]
  enabled = true
  ...
 
[http]
  enabled = true
  bind-address = ":8086"
  auth-enabled = true
  ...
  1. 进入influx cli创建一个admin用户
./boot.sh exec influx influx
CREATE USER admin WITH PASSWORD 'mysecret' WITH ALL PRIVILEGES
  1. 在custom-compose配置中修改influx的port配置,允许外部访问influx的8086和8083接口
influx:
  ports:
    - 8086:8086
    - 8083:8083
  1. 删除旧的docker并重新生成所有服务(influx和grafana的数据都保存在volume里,所以不用当心被删掉)

    ./boot.sh stop && ./boot.sh rm -f && ./boot.sh up -d

  2. 使用curl查看数据库信息

    curl -i -G http://localhost:8086/query -u admin:mysecret --data-urlencode "q=SHOW DATABASES"

  3. 在浏览器打开http://localhost:8083 可以看到influx的管理后台界面,在设置中配置帐号密码即可访问

配置邮件告警

  1. 复制custom-compose.yml.temp时把邮件的基本信息都填上

  2. 保证GF_SERVER_ROOT_URL是一个指向可访问的grafana地址

  3. 在grafana后台查看servers setting中的信息是否正确

  4. 在dashboard中配置告警规则

PS: 如果想自定义邮件模板可以在custom-compose.yml中为grafana增加EMAILS_TEMPLATES_PATTERN环境变量,让它指向一个自定义的模板文件夹,模板变量内容可以翻看源码

备份

grafana的配置存放位置

echo `pwd`/grafana

influxdb的数据存放位置

sudo docker volume inspect -f "{{ .Mountpoint }}" monitor_influx-storage

关于

influxdb文档

grafana文档

docker一键安装

About

使用grafana来制作的一个简单好用的监控系统

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages