视频笔记:用 Fluentd 和 Datadog 监视 Docker 的最佳实践 - John Hammink
- 视频信息
- Fluentd: Unified Logging Layer
- 自我介绍
- 什么是 Fluentd?
- Extensible
- 内部架构
- Use Cases
- Docker Toolbox
- Future of Boot2Docker
- Monitoring Docker at Scale (Datadog)
- Monitoring at Scale
视频信息 #
Best Practices for Docker monitoring with Fluentd and Datadog
by John Hammink
(2015/08/11)
http://v.qq.com/x/page/d0314vikb0b.html
Fluentd: Unified Logging Layer #
自我介绍 #
恢复软件和QA工程师,后来由于对分形的痴迷成了Digital Artist。而现在则是喜欢使用GPU对大规模数据直接进行数据视觉化渲染。
github: jammink2
什么是 Fluentd? #
一个 可扩展的 , 可靠的 , 数据收集 工具
- 可扩展:一个很简单的核心 + 很强大的插件
- 可靠的:Buffering, HA (failover), load balancing
- 数据收集工具:像
syslogd
统一的日志数据收集工具,基于 Ruby
写的,有一部分C
的代码。数据流使用统一的JSON
格式。
Extensible #
Core #
- Divide and Conqure
- 缓存、重试
- 错误处理
- 消息路由
- 并行
Plugins #
- 读
- 解析
- Buffer
- 写数据
- 格式化数据
内部架构 #
- Input
- Parser
- Filter
- Buffer
- Format
- Output
简化结构: 输入 → Buffer → 输出
Fluentd 将 M x N 的复杂度,降为 M + N。
Use Cases #
简单的转发 #
{Web
, Mobile
} → Fluentd
→ MongoDB
|
|
略复杂一些的例子 #
{mobile
, web
} → 第一级 fluentd
→ 第二级 fluentd
→ ElasicSearch
Lambda 架构 #
{mobile
, web
} → Fluentd
→ {ElasticSearch
, Hadoop
}
|
|
Fluentd + Docker 的例子 #
环境是3
个Docker容器{Rails
, PostgreSQL
, RabbitMQ
}在运行,日志通过Fluentd
日志驱动输出给 Fluentd
,Fluentd
进而发送给 S3
, MongoDB
, ElasticSearch
, Treasure Data
等等。
下面是接收日志的 fluentd
的配置
|
|
|
|
然后去Treasure Data
可以看到数据
Docker Toolbox #
by Michael Chiang
Docker Toolbox 内容 #
- Docker client
- Machine
- Compose
- Kitematic
- Virtualbox
Future of Boot2Docker #
Boot2Docker CLI
废弃了,被 Docker Machine
替代了
下一代的版本将会代替当前的 TinyCore Linux
版本
Monitoring Docker at Scale (Datadog) #
by Matt Williams
Steps to working with Docker #
- 创建一个 Docker Host (
docker-machine
) - 从一个镜像创建 Docker 容器
- 多个容器协作
Docker Compose
docker-machine #
可以帮助创建 Docker Host
,{Mac
, Windows
}:(boot2docker), Google
, AWS
, Digital Ocean
…
|
|
用vmware
, virtualbox
非常容易,用其他的云服务则需要很多配置。
比如Openstack
|
|
再比如 AWS:
|
|
docker build
→docker run
前端一个 load balancer,用的是nginx
+ consul-template
后端是各种应用。Dockerfile
太多无畏的层,而且使用了 Supervisord
,其实是把容器当做虚拟机了。
|
|
download demo: http://dtdg.co/dkron
监测 docker 状态
两种命令形式,一种是
|
|
这样会只显示容器ID,一串数,估计一般都不知道是啥
另一种是尾坠容器名
|
|
另一种方式查看状态的形式,通过 REST API
|
|
Monitoring at Scale #
Operational Complexity #
- 平均每个主机的容器数量:N (
2014年10月
时,N是5
,今年2016
,统计同样是5
) - N * 主机数量 = 多少个“主机”来管理
- provision, configuration, orchestration, monitoring.
需要去测量的东西 #
一个虚拟主机
10
个左右的东西
一个操作系统
- 大约
100
个测量点
- 大约
N
个容器100
*N
个测量点
110
+100
*N
个测量点/虚拟机
如果我们以前每个主机需要160
个测量点,现在就得需要610
个测量点
如果我们有100
个主机,就得需要61K
个测量点。
和虚拟机不同,容器的生存周期更短
虚拟机的生存周期可能是小时、天、月为单位,而容器则是分钟、小时,天为单位。
用 Tag
去监测,而不是用主机IP之类的。这样可以忽略不同容器的生死变化。