基于docker方式
前言
要搭建服务器监控平台,总共分三步:
第一步,数据采集;
第二步,数据存储;
第三步,数据可视化。
Telegraf
介绍
由influxdata公司开发的用于采集系统数据的服务,用纯go编写,通过插件化方式进行采集各种服务(system,docker,redis,nginx,kafka等)监控指标并且上报给相应的中间件,比如influxdb,opentsdb(商城docker监控使用这个)。Telegraf也是整个TICK(telegraf+influxdb+chronograf+kapacitor)生态栈的第一块组件也是最重要的组件。
特点:
纯go编写,不需要依赖其他组件;
消耗相关系统资源比较小;
plugins支持多种输入输出插件(采集和上报)
下载镜像以及安装
检索: docker search telegraf
在docker 镜像中搜索telegraf ,此时会有很多镜像检索出来,一般情况下我们使用STARTS数量较高,且OFFICIAL为官方的镜像下载
拉去镜像:
docker pull telegraf
启动和配置 telegraf 镜像
修改telegraf.conf配置,使其支持docker, telegraf.conf文件可以先启动一次telegraf然后通过
docker cp telegraf:/etc/telegraf/telegraf.conf ./telegraf
命令把容器内的配置文件拷贝出来再修改。
找到配置文件的# # Read metrics about docker containers然后把下面的内容取消注释
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
container_names = []
container_name_include = []
container_name_exclude = []
timeout = "5s"
perdevice = true
total = false
tag_env = ["JAVA_HOME", "HEAP_SIZE"]
docker_label_include = []
docker_label_exclude = []
然后修改influxdb的ip地址
urls = ["http://localhost:8086"]
创建需要映射的文件夹和文件修改器配置
mkdir -p /root/telegraf/telegraf.conf
启动telegraf
docker run -d --name=telegraf \
-v /root/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf
-v /var/run:/var/run telegraf
通过-v参数,把本地的telegraf.conf放到容器中覆盖默认的配置,同时把/var/run也放入容器内,因为其中有docker.sock这个文件是与docker通信的接口。
InfluxDB
Influxdb 是一个开源的分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。
Influxdb 有如下三大特性:
①、基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);
②、可度量性:你可以实时对大量数据进行计算;
③、基于事件:它支持任意的事件数据;
安装influxdb
influxdb是一个时序数据库,非常适合用来记录监控信息。
拉取镜像
docker pull tutum/influxdb
启动镜像
docker run \
-itd -p 8083:8083 \
-p 8086:8086 \
-e ADMIN_USER="root" \
-e INFLUXDB_INIT_PWD="root" \
-e PRE_CREATE_DB="telegraf" \
--name influxdb tutum/influxdb:latest
开放8083和8086两个端口(8083是influxdb的web管理端,8086是数据传输端口)。用户名root,密码root,初始创建数据库telegraf供telegraf保存数据。
如果想让数据库只保留1天的数据可以使用RETENTION POLICIES来约束,例如
CREATE RETENTION POLICY "1_day" ON "telegraf" DURATION 1d REPLICATION 1 DEFAULT
1. 特征:
1. 时序性(Time Series)
与时间相关的函数的灵活使用(诸如最大、最小、求和等);
2. 度量(Metrics)
对实时大量数据进行计算;
3. 事件(Event)
支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。
2. 特点:
- schemaless(无结构),可以是任意数量的列;
- min, max, sum, count, mean, median 一系列函数,方便统计;
- Native HTTP API, 内置http支持,使用http读写;
- Powerful Query Language 类似sql;
- Built-in Explorer 自带管理工具。
3. 功能及默认
- 时序数据库
- 默认端口为Web端8083 , API端8086 , 默认登陆信息admin
4. 主要概念
1) 与SQL的名词做比较
database |
数据库 |
数据库 |
measurement |
数据库中的表 |
fields,tags以及time列的容器 |
points |
表中的一行数据 |
同一个series中具有相同时间的field set |
2) InfluxDB的独有概念
Point
timestamp |
每个数据都需要一个时间戳(主索引&自动生成),在TSM存储引擎中会特殊对待,以为了优化后续的查询操作 |
field |
1. 各种记录值(必须存在,没有索引的属性),eg:温度 2. 由field key,field value组成 3. field key和field value对组成field set 4. 如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。fields相当于SQL的没有索引的列。 5. field value可以为string,float,integer或boolean类型 |
tag |
1. 各种有索引的属性,eg:地区 2. tag key,tag value组成 3. tag key和tag value对组成tag set 4. tags相当于SQL中的有索引的列 5. tag value只能是string类型 |
series
- series是共享同一个retention policy,measurement以及tag set的数据集合
- series相当于是InfluxDB中一些数据的集合。所有在数据库中的数据,都要通过图表展示出来,而series则表示表里面的数据,可以在图表上画成几条线(通过tags排列组合算出来)
shard
每个存储策略下会存在许多shard,每个shard存储一个指定时间段的数据,例如7点-8点的数据落入shard0中,8点-9点的数据落到shard1中,每个shard都对应一个底层的tsm存储引擎,有独立的cache,wal,tsm file。
retention policy
保留策略(RP)是用来定义数据在InfluxDB存放的时间,或者定义保存某个期间的数据。当你创建数据库时,InfluxDB会自动创建一个autogen(具有无限保留的保留策略)
5. 常用命令
1. 用户管理:
- 显示用户
SHOW USERS
- 创建用户和设置密码
CREATE USER "username" WITH PASSWORD 'password'
- 创建管理员权限的用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES
- 删除用户
DROP USER "username"
授权数据库给指定用户
GRANT ALL PRIVILEGES ON cadvisor TO testuse
2. database:
- 创建数据库:
CREATE DATABASE testDB
- 显示所有数据库:
SHOW DATABASES
- 删除数据库:
DROP DATABASE testDB
- 使用数据库:
USE testDB
创建默认的数据保留策略,设置保存时间30天,副本为1
CREATE RETENTION POLICY "xx_retention" ON "xx" DURATION 30d REPLICATION 1 DEFAULT
6. 函数
- 聚合函数:
FILL(), INTEGRAL(),SPREAD(), STDDEV(),MEAN(), MEDIAN()
- 选择函数:
SAMPLE(), PERCENTILE(), FIRST(), LAST(), TOP(), BOTTOM()
- 转换函数:
DERIVATIVE(), DIFFERENCE()
- 预测函数:
HOLT_WINTERS()
Granfa
grafana是一个用于显示influxdb内容的图形化工具。
Grafana是一个纯html/js的web应用,是一个开源仪表盘工具,访问InfluxDB时不会存在跨域访问的限制,只要配置好数据源后,即可展示监控数据。
特点:
1. 丰富的数据源接口,支持InfluxDB、MySQL、ElasticSearch、PostgreSQL等多数据源
2. 丰富的API接口,方便自动化程序调用
3. 监控dashboard导入导出,制作好模板后导入后修改参数即可实现实时监控
4. 支持复杂的告警规则及邮件告警
拉取镜像
docker pull grafana/grafana
启动grafana
docker run -itd -p 3000:3000 \
-e INFLUXDB_HOST=122.112.166.47 \
-e INFLUXDB_PORT=8086 \
-e INFLUXDB_NAME=telegraf \
-e INFLUXDB_USER=root \
-e INFLUXDB_PASS=root \
--name grafana \
docker.io/grafana/grafana
这样就启动了一个连接122.112.166.47:8086端口的influxdb的grafana。在-e参数后面填写用户名密码和连接的数据库。
grafana 登录页面
添加 数据源:
Grfana 数据源支持很多数据源 influxDB, MYSQL ,Elasticsearch 这些都可以做数据源;目前调研使用的是 influxDB数据源
可以在官网上下载相应的dashboard 可以很快的搭建出监控系统的dashboard。
如下图