基于docker方式
要搭建服务器监控平台,总共分三步:
第一步,数据采集;
第二步,数据存储;
第三步,数据可视化。
由influxdata公司开发的用于采集系统数据的服务,用纯go编写,通过插件化方式进行采集各种服务(system,docker,redis,nginx,kafka等)监控指标并且上报给相应的中间件,比如influxdb,opentsdb(商城docker监控使用这个)。Telegraf也是整个TICK(telegraf+influxdb+chronograf+kapacitor)生态栈的第一块组件也是最重要的组件。
特点:
纯go编写,不需要依赖其他组件;
消耗相关系统资源比较小;
plugins支持多种输入输出插件(采集和上报)
下载镜像以及安装
在docker 镜像中搜索telegraf ,此时会有很多镜像检索出来,一般情况下我们使用STARTS数量较高,且OFFICIAL为官方的镜像下载
docker pull 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 是一个开源的分布式时序、时间和指标数据库,使用 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. 时序性(Time Series)
与时间相关的函数的灵活使用(诸如最大、最小、求和等);
2. 度量(Metrics)
对实时大量数据进行计算;
3. 事件(Event)
支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。
schemaless(无结构),可以是任意数量的列;
min, max, sum, count, mean, median 一系列函数,方便统计;
Native HTTP API, 内置http支持,使用http读写;
Powerful Query Language 类似sql;
Built-in Explorer 自带管理工具。
时序数据库
默认端口为Web端8083 , API端8086 , 默认登陆信息admin
database |
数据库 |
数据库 |
measurement |
数据库中的表 |
fields,tags以及time列的容器 |
points |
表中的一行数据 |
同一个series中具有相同时间的field set |
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(具有无限保留的保留策略)
显示用户
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
创建数据库:
CREATE DATABASE testDB
显示所有数据库:
SHOW DATABASES
删除数据库:
DROP DATABASE testDB
使用数据库:
USE testDB
创建默认的数据保留策略,设置保存时间30天,副本为1
CREATE RETENTION POLICY "xx_retention" ON "xx" DURATION 30d REPLICATION 1 DEFAULT
聚合函数:
FILL(), INTEGRAL(),SPREAD(), STDDEV(),MEAN(), MEDIAN()
选择函数:
SAMPLE(), PERCENTILE(), FIRST(), LAST(), TOP(), BOTTOM()
转换函数:
DERIVATIVE(), DIFFERENCE()
预测函数:
HOLT_WINTERS()
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。
如下图