摘要:由于公司沒有運維又需要監(jiān)控服務(wù)器的一些數(shù)據(jù)信息想盡快的啟動一個數(shù)值監(jiān)控系統(tǒng)技術(shù)評估了下打算的方式來建設(shè)是一個時間數(shù)列數(shù)據(jù)庫并且自帶一些簡單圖形展示功能雖然展示方面不是很完美但是在收集時間數(shù)據(jù)上非常的方便和簡單根據(jù)官網(wǎng)的例子只需要一個連接就能
由于公司沒有運維, 又需要監(jiān)控服務(wù)器的一些數(shù)據(jù)信息, 想盡快的啟動一個數(shù)值監(jiān)控系統(tǒng). 技術(shù)評估了下打算 graphite + grafana 的方式來建設(shè).
graphite 是一個時間數(shù)列數(shù)據(jù)庫,并且自帶一些簡單 web 圖形展示功能. 雖然 web 展示方面不是很完美,但是在收集時間數(shù)據(jù)上非常的方便和簡單. 根據(jù) https://graphiteapp.org/ 官網(wǎng)的例子,只需要一個 tcp 連接就能向 graphite 服務(wù)上傳基于時間的數(shù)值了.
echo "foo.bar 1 `date +%s`" | nc graphitehost 2003
而 grafana 呢? 是一個顏值極高的數(shù)據(jù)圖形化分析和監(jiān)控應(yīng)用. 至于顏值有多高呢?自己直接看看這個 demo 就能知道了 http://play.grafana.org/. 最重要的一點是 grafana 官方自帶 graphite 的數(shù)據(jù)源的插件. 這應(yīng)用組合在一起就開箱即用了.
那為了方便快捷開發(fā)和開發(fā)這個系統(tǒng),就決定用 docker-compose 的方式構(gòu)建由graphite 和 grafana 組合的服務(wù).
服務(wù)端配置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 字段將兩個服務(wù)的磁盤空間都映射到本地主機上;映射的路徑都可以在 docker hub 上這個容器說明里面看到;這樣我們監(jiān)控的數(shù)據(jù)就持久化到了本地.
在服務(wù)端通過 docker-compose up -d 就將服務(wù)啟動起來了;用配置 grafana 默認管理員賬戶密碼配置好 graphite 的數(shù)據(jù)源. 需要注意的就是在配置 graphite 的http url 的時候直接使用 http://monitor_graphite 就可以了; 訪問的方式選擇為proxy. 最后填好 graphite 對應(yīng)的鑒權(quán)信息. 服務(wù)端 graphite 和 grafana 就配置好了.
這里需要注意的是, graphite 的 2003 是需要暴露到公網(wǎng)的. 所以記得設(shè)置主機的防火墻;還有就是由于是直接暴露到了公網(wǎng)的,最好針對訪問的 ip 做好白名單.
客戶端收集數(shù)據(jù)的客戶端其實非常的簡單, 創(chuàng)建一個到 graphite 的 TCP 連接;然后寫入自己需要的保存的數(shù)據(jù)即可.為了驗證可行性,就直接用 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 可以快速的構(gòu)建起應(yīng)用所需要基礎(chǔ)設(shè)施,自己只要寫一些定制的內(nèi)容就很快的完成任務(wù). 感謝 docker.
希望大家喜歡.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/27078.html
摘要:通過的我們可以將多個有機的組合起來構(gòu)建出自己需要的服務(wù)但是這里有幾個小問題就是不利于分享步驟麻煩需要自己創(chuàng)建指定使用那如何解決上面的兩個問題呢第節(jié)例子中的服務(wù)可以通過創(chuàng)建一個這樣的文件來解決通過下面的命令就能將所有需要的啟動起來 通過docker 的 network我們可以將多個 container 有機的組合起來構(gòu)建出自己需要的服務(wù). 但是這里有幾個小問題就是 不利于分享. 步驟麻...
摘要:通過能獲得很多別人定制好的但是如果自己想制作一個自己容器該怎么弄呢用就像一個腳本文件告訴如何創(chuàng)建一個新的下面舉例來用來制作一個服務(wù)器的指令剛才提到了社區(qū)已經(jīng)有很多很好用的那我們要構(gòu)建自己的的話就可以在這些的基礎(chǔ)上來做我們要做一個基于的服務(wù)器 通過 docker hub 能獲得很多別人定制好的image, 但是如果自己想制作一個自己容器該怎么弄呢? 用 Dockerfile Docker...
摘要:到現(xiàn)在為止我們會從拉取自己需要的文件并執(zhí)行起來還會基于已有的來制作自己特殊需要的但是如果我們完成一個功能需要多個組合起來使用該怎么辦呢雖然可以通過來制作一個這樣的但是如果所有的功能都做在一個中如果有一個模塊需呀改變的話就需要重新構(gòu)建整個作為 到現(xiàn)在為止,我們會從 docker hub 拉取自己需要的 image 文件并執(zhí)行起來. 還會基于已有的 image 來制作自己特殊需要的 ima...
摘要:上一篇提到使用啟動一個容器如果沒有使用來指定容器名字的話會自動按照形容詞名人名的形式生成一個那這些名人是誰呢源代碼說明一切自用一些著名的科學(xué)家和黑客名字來命名容器如果有你認為有還沒有在這些列表中的話給項目提交哈哈想給牛逼項目提交嗎又多 上一篇 blog 提到使用 docker 啟動一個容器如果沒有使用--name來指定容器名字的話,docker 會自動按照 形容詞_名人名的形式生成一個...
摘要:在程序員英語娛樂主題節(jié)目的直播中介紹了下在網(wǎng)站學(xué)習(xí)的視頻由于時間倉促只學(xué)習(xí)了一部分最近因為的公司的原因也沒有時間繼續(xù)搞直播所以想寫一篇分享下自己的的學(xué)習(xí)經(jīng)驗想學(xué)習(xí)簡短有效的風(fēng)格所以就將文章題目定為速成班準備本地已經(jīng)安裝好了現(xiàn)在各個操作系統(tǒng)上 在程序員英語娛樂主題節(jié)目http://www.douyu.com/aftercode的直播中介紹了下在 egghead 網(wǎng)站學(xué)習(xí) docker 的...
閱讀 3046·2021-09-22 15:43
閱讀 5384·2021-09-06 15:02
閱讀 928·2019-08-29 13:55
閱讀 1769·2019-08-29 12:58
閱讀 3215·2019-08-29 12:38
閱讀 1356·2019-08-26 12:20
閱讀 2333·2019-08-26 12:12
閱讀 3416·2019-08-23 18:35