摘要:的展示非常炫酷,絕對是運維提升逼格的一大利器。另外的可視化功能比強得多,而且以上版本將集成報警功能。它由寫成,著力于高性能地查詢與存儲時序型數據。被廣泛應用于存儲系統的監控數據,行業的實時數據等場景。
原有監控系統
整個系統以 Graphite (carbon + whisper) 為核心, kong 通過 statsd plugin 將服務調用信息發送至 statsd, 而 statsd 則將統計信息通過 Web API 保存至Graphite . 最終在 Grafana 中通過 Graphite Data Source 獲取統計信息并輸出圖表到面板.
這是網上找到的, 對 Grafana 的描述
Grafana 是一個開源的指標量監測和可視化工具。常用于展示基礎設施的時序數據和應用程序運行分析。Grafana 的 dashboard 展示非常炫酷,絕對是運維提升逼格的一大利器。
grafana 的套路基本上跟 kibana 差不多,都是根據查詢條件設置聚合規則,在合適的圖表上進行展示,多個圖表共同組建成一個 dashboard,熟悉 kibana 的用戶應該可以非常容易上手。另外 grafana 的可視化功能比 kibana 強得多,而且 4 以上版本將集成報警功能。
在之前的監控中, 只能統計到 kong 的調用信息, 整個結構的復雜度高, 而實現的功能卻比較簡單. 搞了這么大一套鬼東西, 只能查看 kong 的監控. 雖然能通過 Zabbix Plugin 在 Grafana 中查看 zabbix 的監控數據, 但是支持度有限, zabbix 的性能也... 叔惡死 ...
迭代開源的時序性數據庫不多, 其中比較出名的有 Graphite 跟 influxdb.
這是維基百科上對 influxdb 的介紹
InfluxDB 是一個由 InfluxData 開發的開源時序型數據庫[note 1]。它由 Go 寫成,著力于高性能地查詢與存儲時序型數據。InfluxDB 被廣泛應用于存儲系統的監控數據,IoT 行業的實時數據等場景。
通過了解, influxdb 相比 Graphite 有這些優勢:
提供 telegraf 作為 agent 采集服務器信息, 并有非常豐富的插件用戶采集 Nginx/Redis/PHPFPM/Elasticsearch 等的狀態信息. 真正提供了采集/存儲/可視化, 屌屌屌.
可擴展能力 (待實踐)
方便而強大的查詢語言
高效存儲 (待驗證)
而其中, Telegraf 也提供了 Statsd Server 功能, 解決了 Statsd 官方推薦的 influxdb backend 插件只支持 influxdb 0.9 的情況 .
基于 Influxdb + Telegraf + Grafana 搭建的監控系統在這一版的監控系統中, 我們將利用 Telegraf 或者直接提交至 Influxdb, 來采集三種信息:
在每臺機器上安裝 Telegraf 用于采集服務器及其安裝的軟件的狀態和統計信息
在網關所處的機器上, 啟用 Telegraf 提供的 Statsd Server 功能, 在 Kong 中, 啟用 Statsd 插件, 將調用日志提交至 Statsd.
在服務中創建計劃任務定時提交業務數據提交至 Influxdb
Influxdb 提供了一個 Web API 用于管理, 類似于 Mysql, Influxdb 也提供了 命令行的 Client 用于管理.
同時, 需要部署 Grafana 用于可視化面板. 部署 Chronograf 用于管理 Influxdb. Chronograf 提供了 Influxdb 的 Web Admin 功能(在 Influxdb 0.9時代是內置在 Influxdb中的), 以及比較豐富的圖表功能, 但是不能跟 Grafana 比. 因此我們只把它用來管理 Influxdb.
Telegraftelegraf 內置了很多 Input Plugin, 用途是什么呢?
回想到如果是你自己去做一個監控, 能夠做到記錄每分鐘 CPU 的空閑率是多少, 要怎么做?
搞一個數據庫, 用來放數據的
寫一個腳本, 用來獲取 CPU 的相關數據, 加上時間戳, 然后保存到數據庫
創建一個定時任務, 一分鐘運行一次腳本
寫一個簡單的程序, 從數據庫查到數據, 然后根據時間戳, 繪制成圖表.
在你的腳本里面, 你可以采集任何你采集得到的數據, 然后懟到數據庫. 而 Input Plugin 就是寫好了的腳本. 只需要在配置文件中開啟, 就可以采集到對應的數據. telegraf 內置的 Input Plugin 有這些:
Nginx
MySQL
PHP FPM
redis
Net
Netstat
MongoDB
PostgreSQL
Zipkin
Zookeeper
Elasticsearch
Apache
Docker
...
oh shit! 我要的都有!
而且, 前面講到, telegraf 內置了一個 Statsd Server (Service Inputs), 從而解決了 Kong 調用監控的問題. 然而這不是全部, telegraf 還提供了:
HTTP Listener
TCP Listener
UDP Listener
Webhooks Listener
shit..
這只是 Input, Output 還支持 Graphite, Elasticsearch, Datadog 等等.. shit..
安裝部署需要準備一臺機器用于安裝數據庫及 UI. 安裝完成后啟動服務, 并在需要監控的每臺機器上安裝 agent. 根據需要配置好 input plugin.
每個 telegraf 只能提交到一個 database. telegraf 的每個 input 項都會有一個 host 的 tag, 它的值默認是機器的 hostname, 可以在 telegraf 的配置文件中修改.
根據資源編排, 以及 Grafana 的面板模板變量, 將機器與數據庫的關系定位:
以每臺機的 IP 作為 hostname, 或是以 {分組名}+{組內編號}.
一個分組一個數據庫
根據分組需要開啟 input plugin
固定一個臺機采集所有 mysql, redis 等服務
好了, 那么開工!
安裝 Influxdbcd /usr/local/src wget https://dl.influxdata.com/influxdb/releases/influxdb-1.3.2.x86_64.rpm yum localinstall influxdb-1.3.2.x86_64.rpm # 啟動 /etc/init.d/influxdb start # 檢查 8086 端口 curl -i "http://127.0.0.1:8086"安裝 Chronograf
cd /usr/local/src wget https://dl.influxdata.com/chronograf/releases/chronograf-1.3.6.1.x86_64.rpm yum localinstall chronograf-1.3.6.1.x86_64.rpm # 啟動 /etc/init.d/chronograf start # 檢查 8888 端口 curl -i "http://127.0.0.1:8888"
如果 8888 已被占用, 需要指定端口運行
nohup chronograf --port=8889 > /dev/null 2>&1 &安裝 Grafana
cd /usr/local/src wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm yum localinstall grafana-4.4.3-1.x86_64.rpm # 啟動 /etc/init.d/grafana-server start # 檢查 3000 端口 curl -i "http://127.0.0.1:3000"安裝 Telegraf
需要在每一臺機器上安裝 Telegraf 作為 agent, 采集跟上報數據到 Influxdb. 包括安裝 Influxdb 的機器
cd /usr/local/src wget https://dl.influxdata.com/telegraf/releases/telegraf-1.3.5-1.x86_64.rpm yum localinstall telegraf-1.3.5-1.x86_64.rpm
安裝完成后, 默認配置已經有采集系統信息的了, 需要增加幾項 input
如果配置的 database 不存在, 將自動創建.
[[outputs.influxdb]] urls = ["http://10.1.0.1:8086"] database = "servers_xxxx" retention_policy = "" write_consistency = "any" timeout = "5s"
需要在 nginx 上啟用 status, 我們固定使用 1200 端口.
server { listen *:1200 default_server; server_name _; location /nginx_status { stub_status on; access_log off; } }
然后修改 /etc/telegraf/telegraf.conf
[[inputs.nginx]] urls = ["http://127.0.0.1:1200/nginx_status"]
需要啟用 fpm 的status
pm.status_path = /status
然后修改 /etc/telegraf/telegraf.conf
[[inputs.phpfpm]] urls = ["fcgi://127.0.0.1:7006/status"]
[[inputs.net]] interfaces = ["eth0", "eth1"]
[[inputs.netstat]]
配置完成后, 需要對配置進行測試, 完成后啟動再啟動
telegraf -config /etc/telegraf/telegraf.conf -test /etc/init.d/telegraf start配置 Grafana 面板
在 Grafana 中, 需要先配置數據源 (Data Source), 然后創建 Dashboard, 在 Dashboard 中創建 Panel 也就是各種統計組件. 最終完成一個面板的配置.
配置數據源
配置數據源需要注意幾個地方:
type, 選擇 Influxdb,
name, 固定 server_{name}
url, Influxdb 的地址
access, 固定 proxy. 此外還有 direct. 前者是經由 Grafana 所在機器代理訪問 Influxdb, 后者是在瀏覽器直接訪問 Influxdb.
database, 目標機器的 Telegraf 做配置的 database
配置完成后, 點及 Add 兩次, 如果顯示 test success 即為成功.
創建面板可以選擇切換到手動編輯 SQL 模式.
然后保存, 這樣就創建好了第一個面板了.
查詢語言具體需要查看官方文檔
Influxdb 使用的查詢語言是一種類 SQL 的查詢語言
InfluxDB’s SQL-like query language for interacting with data in InfluxDB.
Influxdb 是一種時序型的數據庫, 跟關系型數據庫(以 mysql 為例)的區別, 我理解就是數據庫自動維護著 created_at
結構的異同都有 database, 并且都需要創建才能使用
mysql 有 table, Influxdb 有 measurement, 兩者的角色差不多
measurement 下有 tag, tag 下才是 field.
measurement + tag = serie
查詢語句的異同CRUD 中 Influxdb 只有 C R D
Influxdb 對正則表達式的支持. 例如 SELECT "value" FROM /kong_sms_request_status_*/
tag 跟 field 都可以用于 where 查詢
Influxdb 有更豐富的聚合查詢
當然, 兩種類型的數據庫的主要用途不同, 對比只是用于方便上手, 并非對比兩者優劣.
> create database "demo" > show databases name: databases name ---- _internal demo > use "demo" Using database demo > insert hello,tag_alpha=2 value=3 > insert hello,tag_alpha=2 value=3 > insert hello,tag_alpha=4 value=5 > insert hello,tag_alpha=4 value=6 > show measurements; name: measurements name ---- hello > select * from hello name: hello time tag_alpha value ---- --------- ----- 1503037127485600991 3 3 1503037249575451262 2 4 1503037384953683603 4 5 1503037626342109770 4 6 > select * from hello where tag_alpha="2" name: hello time tag_alpha value ---- --------- ----- 1503037249575451262 2 4 > select * from hello where tag_alpha="4" and value=6 name: hello time tag_alpha value ---- --------- ----- 1503037626342109770 4 6效果
給一張公司內部署之后的面板圖
RunnerLee: fastD 貢獻者之一
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25820.html
摘要:調整配置文件在選項中,追加即可。有了以上系統常規監控日志集中分析應用調用鏈監控,我們的業務就可以變得更加透明,清晰,可控。相關文章最佳實踐四構建系統可視化監控最佳實踐五構建日志分析 zipkin是一個開放源代碼分布式的跟蹤系統,由Twitter公司開源,它致力于收集服務的定時數據,以解決微服務架構中的延遲問題,包括數據的收集、存儲、查找和展現。它的理論模型來自于Google Dappe...
摘要:點擊前往中文地址先決條件簡單安裝下載地址下載或者其他都可以。版本處理方案新建格式日志文件。配置日志會隨著配置進行生成,結果如下忽略上述日志內容,程序看得懂即可配置推送到需要根據業務場景進行配置,現在顯示最簡單的配置。 過去咱們開發中,對日志這個環節其實并不太重視,直到有一天,應用出現異常,這個時候才想起來日志,但很可惜,為時已晚。 咱們做運維和開發,除了救火,還需要防火,因此一些防范的...
摘要:最佳實踐一構建是一個專門針對應用層而生的一個應用框架,提供良好的中間件,路由以及支持擴展運行,從而具體良好的性能條件。手動創建添加路由地址調用完成最第一個路由。緩存也是一個前置中間件,使用方式與日常操作保持一致。 FastD 最佳實踐一: 構建 API FastD 是一個專門針對 API 應用層而生的一個 PHP 應用框架,提供良好的中間件,路由以及支持 swoole 擴展運行,從而具...
摘要:我們需要將業務或服務放置在網關背后,由網關統一處理請求入口,本身由多個入口的處理變成了一個入口,由網關進行統一調度。網關負責來搞這些事情,你只需要知道網關就好了。 構建完成 API 服務,配置中心之后,架構圖大致如下: showImg(https://segmentfault.com/img/remote/1460000010676395); 我們為何需要網關 引用 別人 的一句話: ...
摘要:過去專門做了一篇文檔來構建配置中心,基于的配置中心。環境要求及構建步驟可參考搭建配置中心隨著業務增長,部署的機器可能會隨著增長,增加配置難度和維護難度。最終架構圖如下無論擴展多少個業務應用,僅需要一個配置中心即可完成多處配置修改。 過去專門做了一篇文檔來構建配置中心,基于 zookeeper 的配置中心。 環境要求及構建步驟可參考: QConf搭建配置中心 隨著業務增長,部署的機器可能...
閱讀 986·2021-09-26 10:15
閱讀 2064·2021-09-24 10:37
閱讀 2580·2019-08-30 13:46
閱讀 2631·2019-08-30 11:16
閱讀 2421·2019-08-29 10:56
閱讀 2591·2019-08-26 12:24
閱讀 3473·2019-08-23 18:26
閱讀 2662·2019-08-23 15:43