文档章节

利用TICK搭建Docker容器可视化监控中心

CodeSheep
 CodeSheep
发布于 07/05 07:08
字数 1457
阅读 2195
收藏 73
点赞 2
评论 3

Profile


概述

性能监控是容器服务必不可少的基础设施,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息。在我的前文《Docker容器可视化监控中心搭建》之中我们就实践过Docker容器的可视化监控,在那篇文章中我们是使用了 cAdvisor + influxdb + grafana 技术栈来完成的。然而容器化世界里向来不会只有一种方法来实现某项功能,可以说有一百条大路来通到罗马,因此本文再来探讨另一种称为 TICK 的技术栈方案来实现Docker容器的性能监控。

基于TICK技术栈实现的Docker容器可视化监控方案架构图如下所示:

TICK方案架构

  • Telegraf:采用插件机制实现的数据采集服务,可以采集包含Docker容器在内的多种性能数据

  • InfluxDB:专门负责存储时序数据

  • Chronograf:基于React.js编写的性能数据可视化服务

  • Kapacitor:提供告警触发和处理功能

这四个组件组成了性能监控的数据管道:Telegraf负责采集节点上的性能数据,然后放入InfluxDB数据库进行存储,Kapacitor通过监听InfluxDB的性能数据来对异常指标发出告警,而Chronograf用来展示集群实时的各项性能指标和状态,提供一个可视化的界面。

下面开始实践的过程!



部署InfluxDB服务

首先准备好 InfluxDB 配置文件:influxdb.conf

mkdir /etc/influxdb
cd /etc/influxdb
touch influxdb.conf
[meta]
  dir = "/var/lib/influxdb/meta"
[data]
  dir = "/var/lib/influxdb/data"
  wal-dir = "/var/lib/influxdb/wal"

然后利用Docker来启动InfluxDB服务:

docker run -d \
--name influxdb \
-p 8086:8086 \
-v /etc/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf \
-v /var/lib/influxdb:/var/lib/influxdb \
docker.io/influxdb


部署Telegraf服务

Telegraf服务需要部署在需要采集数据的节点上。我们首先来准备Telegraf服务的配置文件telegraf.conf

[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  debug = false
  quiet = false
  hostname = "www.codesheep.cn"
  omit_hostname = false

[[outputs.influxdb]]
  urls = ["http://192.168.31.177:8086"]
  database = "telegraf"
  username = ""
  password = ""
  write_consistency = "any"
  timeout = "5s"

[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  container_names = []
  timeout = "5s"
  perdevice = true
  total = false

[[inputs.cpu]]
[[inputs.system]]

该配置文件比较简化,inputs插件是负责数据采集,可以看出来上面的配置说明了我们想采集节点的CPU、System以及Docker容器的各项性能数据;而outputs插件指明了我们将采集到的性能数据放入InfluxDB数据库进行存储。

然后同样利用Docker来启动Telegraf服务

docker run -d \
--name telegraf \
--network host \
-v /etc/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf \
docker.io/telegraf


Chronograf部署

docker run -d \
--name chronograf \
-p 8888:8888 \
-v /var/lib/chronograf:/var/lib/chronograf \
docker.io/chronograf \
--influxdb-url=http://192.168.31.177:8086

注意从上面的指令我们可以看出,Chronograf服务是需要连接到InfluxDB服务中去的,服务启动以后利用浏览器访问8888端口可以打开Chronograf的可视化监控界面



Kapacitor部署

docker run -d \
--name kapacitor \
-p 9092:9092 \
-v /var/lib/kapacitor:/var/lib/kapacitor \
docker.io/kapacitor

好了,至此 TICK 组件已经部署完成,我们可以查看一下宿主机上的容器情况,发现服务都已经启动起来了:

容器运行情况



实际试验

浏览器打开:localhost:8888来访问 Chronograf 提供的可视化界面,后续所有的操作都基于该界面。

  • 点击 Chronograf 主界面左侧菜单的 Host List,可以看到被监控的节点信息:

被监控的节点信息

然后我们点击节点名进入后,就可以查看从该节点上采集到的各项主要指标数据的图表:

查看节点的各项性能数据

除此之外,我们还可以点击节点上的 Apps 具体监控小类,如 docker类别,这样可以得到仅仅与docker相关的性能数据展示:

查看docker小类的性能指标数据

docker小类的性能指标数据展示

  • 然后我们点击 Chronograf 主界面左侧菜单的 Data Explorer,可以看到从InfluxDB那里获得的数据表,以及存储于InfluxDB数据表中的各项具体指标

Data Explorer

  • 最后我们来看一下如何利用Kapacitor来实现告警功能。

点击 Chronograf 主界面左侧菜单的 Alert,可以自定义创建告警规则:

自定义创建告警规则

这里给出一个规则配置示例:我们可以监控某个具体性能指标的变化,如配置一个告警规则等:

规则配置示例



后记

作者更多的SpringBt实践文章在此:


如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:



作者更多 务实、能看懂、可复现的 原创文章尽在公众号 CodeSheep,欢迎订阅 ⬇️⬇️⬇️

CodeSheep · 程序羊


© 著作权归作者所有

共有 人打赏支持
CodeSheep

CodeSheep

粉丝 124
博文 38
码字总数 53127
作品 0
南京
程序员
加载中

评论(3)

晒太阳的小猪
晒太阳的小猪

引用来自“201”的评论

感觉现在不是缺方案,而是缺合适的场景和实践的环境。
没有本地源,一切都妄谈。
gaoyanglinux
gaoyanglinux
请问您的docker版本是多少,我的环境上,不支持 --network 选项
201
201
感觉现在不是缺方案,而是缺合适的场景和实践的环境。
Docker可视化监控?看这篇文章

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由CodeSheep 发表于云+社区专栏 概述 性能监控是容器服务必不可少的基础设施,容器化应用运行于宿主机上,我们需要知道该容器...

腾讯云加社区
07/06
0
0
Docker 容器监控系统初探

本文已获得原作者 七把刀_授权。 随着线上服务的全面 docker 化,对 docker 容器的监控就很重要了。SA 的监控系统是物理机的监控,在一个物理机跑多个容器的情况下,我们是没法从一个监控图表...

掘金官方
07/06
0
0
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
昨天
0
0
利用K8S技术栈打造个人私有云(连载之:初章)

我的想法是什么 最近在学习Docker技术,相信Docker技术大家都有所了解,Docker类似于虚拟机(但与虚拟机又有本质不同),提供进程级别的隔离。我们可以利用Docker来方便地来做很多事情,比如...

CodeSheep
01/24
0
0
Docker容器跨主机通信之:直接路由方式

概述 就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时...

CodeSheep
06/14
0
0
Docker学习路线图 (持续更新中)

Docker学习路线图 最近很多阿里内部的同学和客户私信来咨询如何学习 Docker 技术。为此,我们列了一个路线图供大家学习Docker和阿里云容器服务。这个列表包含了一些社区的优秀资料和我们的原...

易立
2016/05/09
0
0
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope

概述 本系列文章已经通过一个官方示例演示了如何部署应用到上述Istio环境中,并演示了如何设置智能路由、分布式追踪以及Istio 的遥测数据收集、查询及可视化等功能。 阿里云Kubernetes Serv...

osswangxining
06/06
0
0
RPC框架实践之:Apache Thrift

一、概述 RPC(Remote Procedure Call)即 远程过程调用,说的这么抽象,其实简化理解就是一个节点如何请求另一节点所提供的服务。在文章 微服务调用链追踪中心搭建 一文中模拟出来的调用链:...

CodeSheep
05/14
0
0
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)

在开源的日志管理方案中,最出名的莫过于 ELK 了。ELK 是三个软件的合称:Elasticsearch、Logstash、Kibana。 Elasticsearch 一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是...

CloudMan6
2017/11/03
0
0
DockBeat:Beats家族的一个新成员

你想了解你的Docker容器里面都发生了些什么事情么?你有没想过使用一个合适的Beat去读取Docker的指标然后把这些信息都存放到ElasticSearch?那么Dockbeat这个方案可能挺适合你的。 为了能使得...

小埋酱
2016/11/06
17
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
3
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部