资讯专栏INFORMATION COLUMN

[afterCode] docker 速成班 7: 实战 构建基于graphtie/grafana监

jhhfft / 2962人阅读

摘要:由于公司没有运维又需要监控服务器的一些数据信息想尽快的启动一个数值监控系统技术评估了下打算的方式来建设是一个时间数列数据库并且自带一些简单图形展示功能虽然展示方面不是很完美但是在收集时间数据上非常的方便和简单根据官网的例子只需要一个连接就能

由于公司没有运维, 又需要监控服务器的一些数据信息, 想尽快的启动一个数值监控系统. 技术评估了下打算 graphite + grafana 的方式来建设.

graphite 是一个时间数列数据库,并且自带一些简单 web 图形展示功能. 虽然 web 展示方面不是很完美,但是在收集时间数据上非常的方便和简单. 根据 https://graphiteapp.org/ 官网的例子,只需要一个 tcp 连接就能向 graphite 服务上传基于时间的数值了.

echo "foo.bar 1 `date +%s`" | nc graphitehost 2003

而 grafana 呢? 是一个颜值极高的数据图形化分析和监控应用. 至于颜值有多高呢?自己直接看看这个 demo 就能知道了 http://play.grafana.org/. 最重要的一点是 grafana 官方自带 graphite 的数据源的插件. 这应用组合在一起就开箱即用了.

那为了方便快捷开发和开发这个系统,就决定用 docker-compose 的方式构建由graphite 和 grafana 组合的服务.

服务端配置
version: "3"

services:
  graphite:
    container_name: monitor_graphite
    restart: always
    image: sitespeedio/graphite
    volumes:
      - ./data/graphite/storage/whisper:/opt/graphite/storage/whisper
      - ./data/graphite/storage-schemas.conf:/opt/graphite/conf/storage-schemas.conf
    ports:
      - "2003:2003"
      - "8093:80"
  grafana:
    container_name: monitor_grafana
    restart: always
    image: grafana/grafana
    ports:
      - 3018:3000
    environment:
      - "GF_SECURITY_ADMIN_PASSWORD=screct"
      - "GF_SERVER_ROOT_URL=http://subdomain.yourdomain.com"
    volumes:
      - "./data/grafana:/var/lib/grafana"

这里通过 volumes 字段将两个服务的磁盘空间都映射到本地主机上;映射的路径都可以在 docker hub 上这个容器说明里面看到;这样我们监控的数据就持久化到了本地.

在服务端通过 docker-compose up -d 就将服务启动起来了;用配置 grafana 默认管理员账户密码配置好 graphite 的数据源. 需要注意的就是在配置 graphite 的http url 的时候直接使用 http://monitor_graphite 就可以了; 访问的方式选择为proxy. 最后填好 graphite 对应的鉴权信息. 服务端 graphite 和 grafana 就配置好了.

这里需要注意的是, graphite 的 2003 是需要暴露到公网的. 所以记得设置主机的防火墙;还有就是由于是直接暴露到了公网的,最好针对访问的 ip 做好白名单.

客户端

收集数据的客户端其实非常的简单, 创建一个到 graphite 的 TCP 连接;然后写入自己需要的保存的数据即可.为了验证可行性,就直接用 node.js 来写入即可.

// report.js

function ts() {
    return Math.floor(Date.now() / 1000)
}

const client = net.connect(config.graphitePort, config.graphiteHost, () => {
 client.setNoDelay(true)

  setInterval(function () {
    const [cpuUsageIn1Min] = os.loadavg()
    client.write(`server.${config.nameSpace}.os.cpu ${cpuUsageIn1Min} ${ts()}
`)
  }, ms("10s"));
})

client.on("end", () => {
  process.exit(0)
})

使用 docker 可以快速的构建起应用所需要基础设施,自己只要写一些定制的内容就很快的完成任务. 感谢 docker.

希望大家喜欢.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27078.html

相关文章

  • [afterCode] docker 成班 6: docker-compose

    摘要:通过的我们可以将多个有机的组合起来构建出自己需要的服务但是这里有几个小问题就是不利于分享步骤麻烦需要自己创建指定使用那如何解决上面的两个问题呢第节例子中的服务可以通过创建一个这样的文件来解决通过下面的命令就能将所有需要的启动起来 通过docker 的 network我们可以将多个 container 有机的组合起来构建出自己需要的服务. 但是这里有几个小问题就是 不利于分享. 步骤麻...

    Integ 评论0 收藏0
  • [afterCode] docker 成班 4: 自建 Image

    摘要:通过能获得很多别人定制好的但是如果自己想制作一个自己容器该怎么弄呢用就像一个脚本文件告诉如何创建一个新的下面举例来用来制作一个服务器的指令刚才提到了社区已经有很多很好用的那我们要构建自己的的话就可以在这些的基础上来做我们要做一个基于的服务器 通过 docker hub 能获得很多别人定制好的image, 但是如果自己想制作一个自己容器该怎么弄呢? 用 Dockerfile Docker...

    Charles 评论0 收藏0
  • [afterCode] docker 成班 5: 组合 container

    摘要:到现在为止我们会从拉取自己需要的文件并执行起来还会基于已有的来制作自己特殊需要的但是如果我们完成一个功能需要多个组合起来使用该怎么办呢虽然可以通过来制作一个这样的但是如果所有的功能都做在一个中如果有一个模块需呀改变的话就需要重新构建整个作为 到现在为止,我们会从 docker hub 拉取自己需要的 image 文件并执行起来. 还会基于已有的 image 来制作自己特殊需要的 ima...

    neuSnail 评论0 收藏0
  • [afterCode] docker 成班 番外篇: 随机容器名

    摘要:上一篇提到使用启动一个容器如果没有使用来指定容器名字的话会自动按照形容词名人名的形式生成一个那这些名人是谁呢源代码说明一切自用一些著名的科学家和黑客名字来命名容器如果有你认为有还没有在这些列表中的话给项目提交哈哈想给牛逼项目提交吗又多 上一篇 blog 提到使用 docker 启动一个容器如果没有使用--name来指定容器名字的话,docker 会自动按照 形容词_名人名的形式生成一个...

    gxyz 评论0 收藏0
  • [afterCode] docker 成班 1: image

    摘要:在程序员英语娱乐主题节目的直播中介绍了下在网站学习的视频由于时间仓促只学习了一部分最近因为的公司的原因也没有时间继续搞直播所以想写一篇分享下自己的的学习经验想学习简短有效的风格所以就将文章题目定为速成班准备本地已经安装好了现在各个操作系统上 在程序员英语娱乐主题节目http://www.douyu.com/aftercode的直播中介绍了下在 egghead 网站学习 docker 的...

    waltr 评论0 收藏0

发表评论

0条评论

jhhfft

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<