Datadog公有云SaaS监控服务

Datadog (https://www.datadoghq.com/) 是一款监控和统计分析工具主要应用在IT公司和DevOps团队,为这些企业或用户提供完整的SaaS监控服务(软件即服务,全称Software-as-a-Service),包括查看到整个服务的性能、基础设施状态、指标和事件告警等。 Datadog支持多种操作系统环境包括Windows、Linux\UNIX和Mac等,也支持常见的云服务提供商这些服务商包括AWS、微软、Red Hat OpenShift和谷歌云等,另外,按网络环境划分公有云、私有云和混合云,目前Datadog都能支持与管理。以下通过标签的方式来介绍Datadog的使用。


本文目录结构


Datadog酷炫视频

通过以下视频可以更快速直观的了解Datadog。

公司发展历史

Datadog 成立于2010年总部位于美国纽约,截至2017年Datadog已筹集了六轮融资,总额为1.5+亿美元。(以下数据来源天眼查 https://www.tianyancha.com/brand/b8ce0169057)

谁在用Datadog

外国很多软件服务商都在官方网站显著的位置展示了哪些牛逼的公司在用它的产品,视乎在告诉你我的软件好不好看谁在用我就知道了。Datadog也不例外,它的用户包括Twitter,Sonos,Airbnb,WeWork,Medium,诺基亚,Ubisoft,三星和Zendesk等,关于这里更多信息可以参考: https://www.featuredcustomers.com/vendor/datadog/customers。

Datadog监控的优势 vs 不足

我们先从客观角度来看很多开发者用户为什么选择Datadog见以下截图(以下数据来源 https://stackshare.io/datadog )。

综合以上数据并结合自己的观点来说一下Datadog的优势与缺点。

优势

从统计数据可以看到,排名前三的原因分别是:

  • 全监控体系包含各种应用(数据库、WEB服务等);

  • 非常简便的安装方式(很多intergrations(集成服务)在最多1~2分钟内可以部署完毕),只需要在所负责的机器上安装一个Datadog的Agent就可以实现监控数据的收集上报,当服务器规模庞大时它还支持类似Puppet软件来批量安装。

  • 开箱即用、功能分类清晰、界面交互性强、问题跟进与处理有相应的流程。
    不足
    Datadog真的非常优秀,但如果一定要鸡蛋里挑骨头说它的不足,我觉得可以分为三点:

  • 服务端代码不开源看不到具体实现的逻辑,在复杂的场景下出现异常不可控。

  • 国内购买的服务器下载Agent超时严重,需要使用代理下载。

  • 它是一款收费的SaaS监控服务。

Datadog主要的监控功能

Datadog监控功能强大覆盖面广有完整独立的监控体系,如果把监控体系比作一个金字塔,我们来看一下金字塔各层的功能与监控细节。

Agent 相关

Datadog为C/S架构,其中Server端闭源,Client端开源(Client端代码地址见:https://github.com/DataDog/datadog-agent) 。目前Client端代码主要分为两个版本分别为v5和v6版本,推荐使用最新的v6版本与老版本 v5相比,v6版使用Golang进行了重写有着更好的性能,也更加精巧同时向下兼容版本功能。v6版本同时支持收集基础设施指标,日志和接收DogStatusD指标等功能,并暴露以下几个端口(5002端口仅会监听在Windows和OSX操作系统上)向外提供服务。

端口 用途
5000 Agent服务器端口
5001 由代理CLI和GUI用于从正在运行的代理发送命令和提取信息
5002 服务于Windows和OSX上的GUI服务器。
8125 用于Dogstatsd服务器接收外指标。

Agent对服务器资源消耗以6.7.0版本测试为例,CPU平均在0.12%,磁盘(Linux350~400MB , Windows 260MB) ,带宽消耗上行86B/分钟,下行260B/分钟,可以看到整体消耗资源还是非常小的。

单机部署Datadog Agent

Datadog支持主流的操作系统和相应操作系统的发行版本登录Datadog后,访问: https://app.datadoghq.com/account/settings#agent/centosa

批量部署Datadog Agent

可以通过以下常见的开源服务配置管理工具进行部署Agent:

关于Datadog Agent v6版本更多详细信息可以参考版本变更记录: https://github.com/DataDog/datadog-agent/blob/master/CHANGELOG.rst。

Server端相关

Datadog Server端提供了强大的与开源软件融合生态链能力、APM能力、日志功能、丰富的报表和大屏功能(包含网络流量监控报表、事件报表和指标报表)、统一告警平台和API功能等。由于笔者的环境有限,以下部分截图是Datadog官网视频中提供的真实使用场景截图。
网络关系图

主机地图 ,可以从主机地图上看到对所有主机进行标签管理并对标签安地域分类,很适合云环境无CMDB的业务场景。同时通过颜色区分服务的负载与状态,看起来效果非常炫酷。

自定义监控大屏,可以根据自己产品需要进行布局与展示。

最佳实践

案例1 (APM监控5分钟将整个网站性能监控起来)
Datadog的APM支持主流的编程语(Java、python、Ruby、Golang、node、.net、PHP和C++),本文以Golang的Gin框架为例介绍上报性能数据,Gin框架安装见https://app.datadoghq.com/apm/docs?architecture=host-based&language=go

Golang Gin上报APM共分三步:

安装路径,下载Golang Gi框架的APM监控包。
嵌入代码, 下载ddtrace后,在工程的主函数中注入相关代码。
查看Dashboard,当有用户访问网站后,就可以看到用户访问的路径、耗时和HTTP状态码等一些信息。
安装路径

嵌入代码,Gin框架代码案例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import (
gintrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"

"github.com/gin-gonic/gin"
)
func main() {
tracer.Start()
defer tracer.Stop()
// Create a gin.Engine
r := gin.New()
// Use the tracer middleware with your desired service name.
r.Use(gintrace.Middleware("my-web-app")) # 自己应用名
// Continue using the router as normal.
r.GET("/hello", func(c *gin.Context) {
c.String(200, "Hello World!")
})
r.Run(":8080")
}
}

查看Dashboard

以上是一个APM监控案例,通过Datadog可以很快的将我们服务性能监控起来。

如果自己学习或搭建了解APM,可以参考以下的论文:

开源APM组件:

案例2 (通过Python上报自定义指标)

来看一下Datadog可以对接的开源生态软件,目前支持350+且还在持续增长。

我们以Python为例来看一下上报自定义指标,这里共分为三步:

首先,到Intgration中找到Python,并按照指引进行安装(见截图1)。
接着,登录到服务器上使用Intgration中的Python上报代码,按照执行信息进行填写,其中api_key和app_key可以在APIs中找到(见截图1和代码片段)。
最后,服务器上报指标后,可以可以在metrics->explorer->graph中找到(截图2)。同时主机视图上也可以看到上报的自定义截图指标(截图3)。
安装Datadog 库文件。

1
# pip install datadog

确认安装状态,截图1

上报代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/python
# Configure the module according to your needs
from datadog import initialize

options = {
'api_key':'', # 可以在 https://app.datadoghq.com/account/settings#api 找到
'app_key':''
}
initialize(**options)

# Use Datadog REST API client
from datadog import api
title = "Something big happened!"
text = 'And let me tell you all about it here!'
tags = ['version:1', 'application:web']
api.Event.create(title=title, text=text, tags=tags)

# Use Statsd, a Python client for DogStatsd
from datadog import statsd
# Increment a counter.
statsd.increment('djangowang.views')

# Or ThreadStats, an alternative tool to collect and flush metrics,using Datadog REST API
from datadog import ThreadStats
stats = ThreadStats()
stats.start()
stats.increment('page.views')

截图2

截图3

案例3 (实时日志查看)

Datadog的特色功能live tail 实时查看日志,类似Linux系统的命令tail -f效果, 以下来快速演示一下实时日志,共分为两步:
步骤1,在上报日志服务器通过telnet命令连接Datadog服务器的10514端口,如下:

1
# telnet intake.logs.datadoghq.com 10514

输入API Keys + 上报内容,譬如如下。

步骤2, 通过log的live tail 功能查看实时上报的日志。

以上只是演示了live tail的功能 , Datalog服务还支持很多语言上报。如下,关于Datalog更多上报日志可以参考https://docs.datadoghq.com/logs/

如何收费

Datadog收费的细节见以下列表,单位是美金。 网上信息查到Datadog的主要用户群体还是创业公司,这价钱也相对创业公司也比较亲民,可以根据自己的情况按照不同的功能进行计费。

Datadog未来发展

Datadog收购了法国创业公司Madumbo,该公司开发了一款基于AI的网络应用程序测试服务。从新闻可以了解到Datadog后续会逐步往AI智能告警发展,通过大量的数据盖异常检测,异常值检测和预测的算法进行告警。

相关新闻:https://www.appnz.com/chuangxin/20190227_9319.html

总结

Datadog是一家创业公司,与很多公有云提供的免费监控产品相比,Datadog是收费的而且这产品是创业公司的全部,做的体验相对更好。从网上了解使用Datadog产品的用户更多是一些创业公司,这些创业公司的业务分部在不同的云服务商上,Datadog都可以将他们管理起来,并为用户提供一站式监控服务。

做一款产品最担心的是不同的用户标准不一样,譬如A,B两个用户根据自己的产品特性开发了不同的软件框架彼此之间协议不同没有统一的服务标准,如果两个用户同时使用一款监控产品,从接入标准上很难完全满足两个用户的需求。而Datadog聪明的解决了这些问题,它支持最常用的开源软件和开发语言的框架(譬如Golang的Gin和Python的Flask等),Datadog将这些常用开源软件和开源语言框架的信息抽象为指标方式上报到服务器,用户无论使用的是开源协议或是私有协议只要支持开源产品的标准就可以在Datadog用起来,有相同的标准后迁移成本也大大的降低。

Datadog是一款SaaS产品,将所有功能进行了抽象与分类,从体验上更容易找到我们想要的页面,可能是曾经做过运维的原因,能明显感觉到这就是一个我想要的系统,标签分类明确,所有intergrations(集成服务)可以在1-2分钟内接入并最终上报数据展示到Datadog上真的是非常的方便,解决了运维搭建环境、配置报表的很多麻烦事儿,实现一站式运维。当用户的业务出现问题时,系统有相应的问题处理流程使问题可以在系统上闭环解决。所以Datadog的产品体验、设计思路非常值得我们去学习与借鉴。

更多资源
5分钟介绍Datadog功能: https://www.youtube.com/watch?v=mpuVItJSFMc
Datadog CEO Twitter :https://twitter.com/oliveur
Datadog Agent是啥: https://www.jianshu.com/p/924b694a9022