Prometheus 是什么陶夜?
Prometheus是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合,起始是由SoundCloud公司開發(fā)的赖晶。隨著發(fā)展,越來越多公司和組織接受采用Prometheus辐烂,社區(qū)也十分活躍遏插,他們便將它獨立成開源項目,并且有公司來運作纠修。google SRE的書內(nèi)也曾提到跟他們BorgMon監(jiān)控系統(tǒng)相似的實現(xiàn)是Prometheus「斐埃現(xiàn)在最常見的Kubernetes容器管理系統(tǒng)中,通常會搭配Prometheus進行監(jiān)控扣草。
Prometheus 的優(yōu)點
- 非常少的外部依賴了牛,安裝使用超簡單
- 已經(jīng)有非常多的系統(tǒng)集成 例如:docker HAProxy Nginx JMX等等
- 服務自動化發(fā)現(xiàn)
- 直接集成到代碼
- 設計思想是按照分布式、微服務架構(gòu)來實現(xiàn)的
Prometheus 的特性
- 自定義多維度的數(shù)據(jù)模型
- 非常高效的存儲 平均一個采樣數(shù)據(jù)占 ~3.5 bytes左右辰妙,320萬的時間序列鹰祸,每30秒采樣,保持60天密浑,消耗磁盤大概228G蛙婴。
- 強大的查詢語句
- 輕松實現(xiàn)數(shù)據(jù)可視化
架構(gòu)圖
組件介紹
Prometheus生態(tài)系統(tǒng)由多個組件組成。其中許多組件都是可選的
Promethus server
- 必須安裝尔破,
- 本質(zhì)是一個時序數(shù)據(jù)庫
- 主要負責數(shù)據(jù)pull街图、存儲、分析
Push Gateway
- 非必選項
- 支持臨時性Job主動推送指標的中間網(wǎng)關
exporters
- 部署在客戶端的agent,如 node_exporte, mysql_exporter等
alertmanager
- 用來進行報警懒构,Promethus server 經(jīng)過分析餐济, 把出發(fā)的警報發(fā)送給 alertmanager 組件,alertmanager 組件通過自身的規(guī)則胆剧,來發(fā)送通知,(郵件絮姆,或者webhook)
接下來就是實戰(zhàn)啦
本章內(nèi)容
mkdir /opt/monitor/ -p
cd /opt/monitor/
wget https://github.com/x82423990/prometheus/archive/v2.0.0.tar.gz
tar xf v2.0.0.tar.gz
cd prometheus-2.0.linux-amd64
# 運行
# ./prometheus &
通過啟動日志,可以看到 Prometheus Server 默認端口是 9090秩霍。
當 Prometheus 啟動后滚朵,你可以通過瀏覽器來訪問
http://IP:9090
,將看到如下頁面
在默認配置中前域,我們已經(jīng)添加了 Prometheus Server 的監(jiān)控辕近,所以我們現(xiàn)在可以使用PromQL
(Prometheus Query Language)來查看,比如
so , 既然他是一個數(shù)據(jù)庫匿垄, 我們來簡單的了解他的數(shù)據(jù)結(jié)構(gòu)及他的數(shù)據(jù)模型
Prometheus 存儲的是時序數(shù)據(jù), 即按照相同時序(相同的名字和標簽)移宅,以時間維度存儲連續(xù)的數(shù)據(jù)的集合归粉。
時序索引
時序(time series) 是由名字(Metric),以及一組 key/value 標簽定義的漏峰,具有相同的名字以及標簽屬于相同時序糠悼。
時序的名字由 ASCII 字符,數(shù)字浅乔,下劃線倔喂,以及冒號組成,它必須滿足正則表達式 [a-zA-Z_:][a-zA-Z0-9_:]*
, 其名字應該具有語義化靖苇,一般表示一個可以度量的指標席噩,例如 http_requests_total
, 可以表示 http 請求的總數(shù)。
時序的標簽可以使 Prometheus 的數(shù)據(jù)更加豐富贤壁,能夠區(qū)分具體不同的實例悼枢,例如 http_requests_total{method="POST"}
可以表示所有 http 中的 POST 請求。
標簽名稱由 ASCII 字符脾拆,數(shù)字馒索,以及下劃線組成, 其中 __
開頭屬于 Prometheus 保留名船,標簽的值可以是任何 Unicode 字符绰上,支持中文。
時序樣本
按照某個時序以時間維度采集的數(shù)據(jù)渠驼,稱之為樣本渔期,其值包含:
- 一個 float64 值
- 一個毫秒級的 unix 時間戳
格式
Prometheus 時序格式與 OpenTSDB 相似:
<metric name>{<label name>=<label value>, ...}
其中包含時序名字以及時序的標簽。
作業(yè)和實例
prometheus 中渴邦,將任意一個獨立的數(shù)據(jù)源(target)稱之為實例(instance)疯趟。包含相同類型的實例的集合稱之為作業(yè)(job)。
如下是一個含有四個重復實例的作業(yè):
- job: api-server
- instance 1: 1.2.3.4:5670
- instance 2: 1.2.3.4:5671
- instance 3: 5.6.7.8:5670
- instance 4: 5.6.7.8:5671
自生成標簽和時序
prometheus 在采集數(shù)據(jù)的同時谋梭,會自動在時序的基礎上添加標簽信峻,作為數(shù)據(jù)源(target)的標識,以便區(qū)分:
job: The configured job name that the target belongs to.
instance: The <host>:<port> part of the target's URL that was scraped.
如果其中任一標簽已經(jīng)在此前采集的數(shù)據(jù)中存在瓮床,那么將會根據(jù) honor_labels
設置選項來決定新標簽盹舞。詳見官網(wǎng)解釋: scrape configuration documentation
對每一個實例而言,prometheus 按照以下時序來存儲所采集的數(shù)據(jù)樣本:
up{job="<job-name>", instance="<instance-id>"}: 1 表示該實例正常工作
up{job="<job-name>", instance="<instance-id>"}: 0 表示該實例故障
scrape_duration_seconds{job="<job-name>", instance="<instance-id>"} 表示拉取數(shù)據(jù)的時間間隔
scrape_samples_post_metric_relabeling{job="<job-name>", instance="<instance-id>"} 表示采用重定義標簽(relabeling)操作后仍然剩余的樣本數(shù)
scrape_samples_scraped{job="<job-name>", instance="<instance-id>"} 表示從該數(shù)據(jù)源獲取的樣本數(shù)
其中 up
時序可以有效應用于監(jiān)控該實例是否正常工作隘庄。
時序 4 種類型
Prometheus 時序數(shù)據(jù)分為 Counter, Gauge, Histogram, Summary 四種類型踢步。
Counter
Counter 表示收集的數(shù)據(jù)是按照某個趨勢(增加/減少)一直變化的,我們往往用它記錄服務請求總量丑掺,錯誤總數(shù)等获印。
例如 Prometheus server 中 http_requests_total
, 表示 Prometheus 處理的 http 請求總數(shù),可以使用 delta
, 很容易得到任意區(qū)間數(shù)據(jù)的增量街州。
Gauge
Gauge 表示搜集的數(shù)據(jù)是一個瞬時的兼丰,與時間沒有關系玻孟,可以任意變高變低,往往可以用來記錄內(nèi)存使用率鳍征、磁盤使用率等黍翎。
例如 Prometheus server 中 go_goroutines
, 表示 Prometheus 當前 goroutines 的數(shù)量。
Histogram
Histogram 由 <basename>_bucket{le="<upper inclusive bound>"}
艳丛,<basename>_bucket{le="+Inf"}
, <basename>_sum
匣掸,<basename>_count
組成,主要用于表示一段時間范圍內(nèi)對數(shù)據(jù)進行采樣氮双,(通常是請求持續(xù)時間或響應大信鲈汀),并能夠?qū)ζ渲付▍^(qū)間以及總數(shù)進行統(tǒng)計眶蕉,通常我們用它計算分位數(shù)的直方圖砰粹。
例如 Prometheus server 中 prometheus_local_storage_series_chunks_persisted
, 表示 Prometheus 中每個時序需要存儲的 chunks 數(shù)量唧躲,我們可以用它計算待持久化的數(shù)據(jù)的分位數(shù)造挽。
Summary
Summary 和 Histogram 類似,由 <basename>{quantile="<φ>"}
弄痹,<basename>_sum
饭入,<basename>_count
組成,主要用于表示一段時間內(nèi)數(shù)據(jù)采樣結(jié)果肛真,(通常是請求持續(xù)時間或響應大行扯),它直接存儲了 quantile 數(shù)據(jù)蚓让,而不是根據(jù)統(tǒng)計區(qū)間計算出來的乾忱。
例如 Prometheus server 中 prometheus_target_interval_length_seconds
。
Histogram vs Summary
- 都包含
<basename>_sum
历极,<basename>_count
- Histogram 需要通過
<basename>_bucket
計算 quantile, 而 Summary 直接存儲了 quantile 的值窄瘟。
PromQL 基本使用
PromQL (Prometheus Query Language) 是 Prometheus 自己開發(fā)的數(shù)據(jù)查詢 DSL 語言,語言表現(xiàn)力非常豐富趟卸,內(nèi)置函數(shù)很多蹄葱,在日常數(shù)據(jù)可視化,rule 告警中都會使用到它锄列。
我們可以在頁面 http://localhost:9090/graph
中图云,輸入下面的查詢語句,查看結(jié)果邻邮,例如:
http_requests_total{code="200"}
字符串和數(shù)字
字符串: 在查詢語句中竣况,字符串往往作為查詢條件 labels 的值,和 Golang 字符串語法一致筒严,可以使用 ""
, ''
, 或者 ``
, 格式如:
"this is a string"
'these are unescaped: \n \\ \t'
`these are not unescaped: \n ' " \t`
正數(shù)帕翻,浮點數(shù): 表達式中可以使用正數(shù)或浮點數(shù)鸠补,例如:
3
-2.4
查詢結(jié)果類型
PromQL 查詢結(jié)果主要有 3 種類型:
- 瞬時數(shù)據(jù) (Instant vector): 包含一組時序,每個時序只有一個點嘀掸,例如:
http_requests_total
- 區(qū)間數(shù)據(jù) (Range vector): 包含一組時序紫岩,每個時序有多個點,例如:
http_requests_total[5m]
- 純量數(shù)據(jù) (Scalar): 純量只有一個數(shù)字睬塌,沒有時序泉蝌,例如:
count(http_requests_total)
查詢條件
Prometheus 存儲的是時序數(shù)據(jù),而它的時序是由名字和一組標簽構(gòu)成的揩晴,其實名字也可以寫出標簽的形式勋陪,例如 http_requests_total
等價于 {name="http_requests_total"}。
一個簡單的查詢相當于是對各種標簽的篩選硫兰,例如:
http_requests_total{code="200"} // 表示查詢名字為 http_requests_total诅愚,code 為 "200" 的數(shù)據(jù)
查詢條件支持正則匹配,例如:
http_requests_total{code!="200"} // 表示查詢 code 不為 "200" 的數(shù)據(jù)
http_requests_total{code=~"2.."} // 表示查詢 code 為 "2xx" 的數(shù)據(jù)
http_requests_total{code!~"2.."} // 表示查詢 code 不為 "2xx" 的數(shù)據(jù)
操作符
Prometheus 查詢語句中劫映,支持常見的各種表達式操作符违孝,例如
算術運算符:
支持的算術運算符有 +,-泳赋,*雌桑,/,%祖今,^
, 例如 http_requests_total * 2
表示將 http_requests_total 所有數(shù)據(jù) double 一倍校坑。
比較運算符:
支持的比較運算符有 ==,!=千诬,>耍目,<,>=徐绑,<=
, 例如 http_requests_total > 100
表示 http_requests_total 結(jié)果中大于 100 的數(shù)據(jù)邪驮。
邏輯運算符:
支持的邏輯運算符有 and,or泵三,unless
, 例如 http_requests_total == 5 or http_requests_total == 2
表示 http_requests_total 結(jié)果中等于 5 或者 2 的數(shù)據(jù)耕捞。
聚合運算符:
支持的聚合運算符有 sum,min烫幕,max俺抽,avg,stddev较曼,stdvar增淹,count必逆,count_values柠并,bottomk,topk冕末,quantile,
, 例如 max(http_requests_total)
表示 http_requests_total 結(jié)果中最大的數(shù)據(jù)侣颂。
注意档桃,和四則運算類型,Prometheus 的運算符也有優(yōu)先級憔晒,它們遵從(^)> (*, /, %) > (+, -) > (==, !=, <=, <, >=, >) > (and, unless) > (or) 的原則藻肄。
內(nèi)置函數(shù)
Prometheus 內(nèi)置不少函數(shù),方便查詢以及數(shù)據(jù)格式化拒担,例如將結(jié)果由浮點數(shù)轉(zhuǎn)為整數(shù)的 floor 和 ceil嘹屯,
floor(avg(http_requests_total{code="200"}))
ceil(avg(http_requests_total{code="200"}))
查看 http_requests_total 5分鐘內(nèi),平均每秒數(shù)據(jù)
rate(http_requests_total[5m])
更多請參見詳情从撼。
與 SQL 對比
下面我將以 Prometheus server 收集的 http_requests_total
時序數(shù)據(jù)為例子展開對比州弟。
MySQL 數(shù)據(jù)準備
mysql>
# 創(chuàng)建數(shù)據(jù)庫
create database prometheus_practice;
use prometheus_practice;
# 創(chuàng)建 http_requests_total 表
CREATE TABLE http_requests_total (
code VARCHAR(256),
handler VARCHAR(256),
instance VARCHAR(256),
job VARCHAR(256),
method VARCHAR(256),
created_at DOUBLE NOT NULL,
value DOUBLE NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE http_requests_total ADD INDEX created_at_index (created_at);
# 初始化數(shù)據(jù)
# time at 2017/5/22 14:45:27
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "query_range", "localhost:9090", "prometheus", "get", 1495435527, 3);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("400", "query_range", "localhost:9090", "prometheus", "get", 1495435527, 5);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "prometheus", "localhost:9090", "prometheus", "get", 1495435527, 6418);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "static", "localhost:9090", "prometheus", "get", 1495435527, 9);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("304", "static", "localhost:9090", "prometheus", "get", 1495435527, 19);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "query", "localhost:9090", "prometheus", "get", 1495435527, 87);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("400", "query", "localhost:9090", "prometheus", "get", 1495435527, 26);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "graph", "localhost:9090", "prometheus", "get", 1495435527, 7);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "label_values", "localhost:9090", "prometheus", "get", 1495435527, 7);
# time at 2017/5/22 14:48:27
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "query_range", "localhost:9090", "prometheus", "get", 1495435707, 3);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("400", "query_range", "localhost:9090", "prometheus", "get", 1495435707, 5);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "prometheus", "localhost:9090", "prometheus", "get", 1495435707, 6418);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "static", "localhost:9090", "prometheus", "get", 1495435707, 9);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("304", "static", "localhost:9090", "prometheus", "get", 1495435707, 19);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "query", "localhost:9090", "prometheus", "get", 1495435707, 87);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("400", "query", "localhost:9090", "prometheus", "get", 1495435707, 26);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "graph", "localhost:9090", "prometheus", "get", 1495435707, 7);
INSERT INTO http_requests_total (code, handler, instance, job, method, created_at, value) values ("200", "label_values", "localhost:9090", "prometheus", "get", 1495435707, 7);
數(shù)據(jù)初始完成后,通過查詢可以看到如下數(shù)據(jù):
mysql>
mysql> select * from http_requests_total;
+------+--------------+----------------+------------+--------+------------+-------+
| code | handler | instance | job | method | created_at | value |
+------+--------------+----------------+------------+--------+------------+-------+
| 200 | query_range | localhost:9090 | prometheus | get | 1495435527 | 3 |
| 400 | query_range | localhost:9090 | prometheus | get | 1495435527 | 5 |
| 200 | prometheus | localhost:9090 | prometheus | get | 1495435527 | 6418 |
| 200 | static | localhost:9090 | prometheus | get | 1495435527 | 9 |
| 304 | static | localhost:9090 | prometheus | get | 1495435527 | 19 |
| 200 | query | localhost:9090 | prometheus | get | 1495435527 | 87 |
| 400 | query | localhost:9090 | prometheus | get | 1495435527 | 26 |
| 200 | graph | localhost:9090 | prometheus | get | 1495435527 | 7 |
| 200 | label_values | localhost:9090 | prometheus | get | 1495435527 | 7 |
| 200 | query_range | localhost:9090 | prometheus | get | 1495435707 | 3 |
| 400 | query_range | localhost:9090 | prometheus | get | 1495435707 | 5 |
| 200 | prometheus | localhost:9090 | prometheus | get | 1495435707 | 6418 |
| 200 | static | localhost:9090 | prometheus | get | 1495435707 | 9 |
| 304 | static | localhost:9090 | prometheus | get | 1495435707 | 19 |
| 200 | query | localhost:9090 | prometheus | get | 1495435707 | 87 |
| 400 | query | localhost:9090 | prometheus | get | 1495435707 | 26 |
| 200 | graph | localhost:9090 | prometheus | get | 1495435707 | 7 |
| 200 | label_values | localhost:9090 | prometheus | get | 1495435707 | 7 |
+------+--------------+----------------+------------+--------+------------+-------+
18 rows in set (0.00 sec)
基本查詢對比
假設當前時間為 2017/5/22 14:48:30
- 查詢當前所有數(shù)據(jù)
// PromQL
http_requests_total
// MySQL
SELECT * from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
我們查詢 MySQL 數(shù)據(jù)的時候低零,需要將當前時間向前推一定間隔婆翔,比如這里的 10s (Prometheus 數(shù)據(jù)抓取間隔),這樣才能確保查詢到數(shù)據(jù)毁兆,而 PromQL 自動幫我們實現(xiàn)了這個邏輯浙滤。
- 條件查詢
// PromQL
http_requests_total{code="200", handler="query"}
// MySQL
SELECT * from http_requests_total WHERE code="200" AND handler="query" AND created_at BETWEEN 1495435700 AND 1495435710;
- 模糊查詢: code 為 2xx 的數(shù)據(jù)
// PromQL
http_requests_total{code~="2xx"}
// MySQL
SELECT * from http_requests_total WHERE code LIKE "%2%" AND created_at BETWEEN 1495435700 AND 1495435710;
- 比較查詢: value 大于 100 的數(shù)據(jù)
// PromQL
http_requests_total > 100
// MySQL
SELECT * from http_requests_total WHERE value > 100 AND created_at BETWEEN 1495435700 AND 1495435710;
- 范圍區(qū)間查詢: 過去 5 分鐘數(shù)據(jù)
// PromQL
http_requests_total[5m]
// MySQL
SELECT * from http_requests_total WHERE created_at BETWEEN 1495435410 AND 1495435710;
聚合, 統(tǒng)計高級查詢
- count 查詢: 統(tǒng)計當前記錄總數(shù)
// PromQL
count(http_requests_total)
// MySQL
SELECT COUNT(*) from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
- sum 查詢: 統(tǒng)計當前數(shù)據(jù)總值
// PromQL
sum(http_requests_total)
// MySQL
SELECT SUM(value) from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
- avg 查詢: 統(tǒng)計當前數(shù)據(jù)平均值
// PromQL
avg(http_requests_total)
// MySQL
SELECT AVG(value) from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710;
- top 查詢: 查詢最靠前的 3 個值
// PromQL
topk(3, http_requests_total)
// MySQL
SELECT * from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710 ORDER BY value DESC LIMIT 3;
- irate 查詢阴挣,過去 5 分鐘平均每秒數(shù)值
// PromQL
irate(http_requests_total[5m])
// MySQL
SELECT code, handler, instance, job, method, SUM(value)/300 AS value from http_requests_total WHERE created_at BETWEEN 1495435700 AND 1495435710 GROUP BY code, handler, instance, job, method;
總結(jié)
通過以上一些示例可以看出气堕,在常用查詢和統(tǒng)計方面,PromQL 比 MySQL 簡單和豐富很多畔咧,而且查詢性能也高不少茎芭。
Prometheus Web
Prometheus 自帶了 Web Console, 安裝成功后可以訪問 http://localhost:9090/graph
頁面誓沸,用它可以進行任何 PromQL 查詢和調(diào)試工作梅桩,非常方便,例如:
通過上圖你不難發(fā)現(xiàn)拜隧,Prometheus 自帶的 Web 界面比較簡單宿百,因為它的目的是為了及時查詢數(shù)據(jù),方便 PromeQL 調(diào)試洪添。
它并不是像常見的 Admin Dashboard垦页,在一個頁面盡可能展示多的數(shù)據(jù),如果你有這方面的需求干奢,不妨試試 Grafana痊焊。
Grafana 使用
Grafana 是一套開源的分析監(jiān)視平臺,支持 Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch 等數(shù)據(jù)源,其 UI 非常漂亮且高度定制化薄啥。
這是 Prometheus web console 不具備的辕羽,在上一節(jié)中我已經(jīng)說明了選擇它的原因。
版本說明
- Mac version 4.3.2
安裝和運行程序
這里我使用 brew 安裝垄惧,命令為
brew update
brew install grafana
當安裝成功后刁愿,你可以使用默認配置啟動程序
grafana-server -homepath /usr/local/Cellar/grafana/4.3.2/share/grafana/
如果順利,你將看到如下日志
INFO[06-11|15:20:14] Starting Grafana logger=main version=4.3.2 commit=unknown-dev compiled=2017-06-01T05:47:48+0800
INFO[06-11|15:20:14] Config loaded from logger=settings file=/usr/local/Cellar/grafana/4.3.2/share/grafana/conf/defaults.ini
INFO[06-11|15:20:14] Path Home logger=settings path=/usr/local/Cellar/grafana/4.3.2/share/grafana/
INFO[06-11|15:20:14] Path Data logger=settings path=/usr/local/Cellar/grafana/4.3.2/share/grafana/data
INFO[06-11|15:20:14] Path Logs logger=settings path=/usr/local/Cellar/grafana/4.3.2/share/grafana/data/log
INFO[06-11|15:20:14] Path Plugins logger=settings path=/usr/local/Cellar/grafana/4.3.2/share/grafana/data/plugins
INFO[06-11|15:20:14] Initializing DB logger=sqlstore dbtype=sqlite3
INFO[06-11|15:20:14] Starting DB migration logger=migrator
INFO[06-11|15:20:14] Executing migration logger=migrator id="copy data account to org"
INFO[06-11|15:20:14] Skipping migration condition not fulfilled logger=migrator id="copy data account to org"
INFO[06-11|15:20:14] Executing migration logger=migrator id="copy data account_user to org_user"
INFO[06-11|15:20:14] Skipping migration condition not fulfilled logger=migrator id="copy data account_user to org_user"
INFO[06-11|15:20:14] Starting plugin search logger=plugins
INFO[06-11|15:20:14] Initializing Alerting logger=alerting.engine
INFO[06-11|15:20:14] Initializing CleanUpService logger=cleanup
INFO[06-11|15:20:14] Initializing Stream Manager
INFO[06-11|15:20:14] Initializing HTTP Server logger=http.server address=0.0.0.0:3000 protocol=http subUrl= socket=
此時到逊,你可以打開頁面 http://localhost:3000
酌毡, 訪問 Grafana 的 web 界面。
其他平臺安裝方案蕾管,請參考更多安裝枷踏。
登錄并設置 Prometheus 數(shù)據(jù)源
Grafana 本身支持 Prometheus 數(shù)據(jù)源,故不需要安裝其他插件掰曾。
使用默認賬號 admin/admin 登錄 grafana
在 Dashboard 首頁旭蠕,點擊添加數(shù)據(jù)源
配置 Prometheus 數(shù)據(jù)源
目前為止,Grafana 已經(jīng)和 Prometheus 連上了旷坦,你將看到這樣的 Dashboard
自定義監(jiān)視畫板
由頂部 Manage dashboard
-> Settings
進入管理頁面
在管理頁面中取消 Hide Controls
點擊頁面底部 + ADD ROW
按鈕, 并選擇 Graph
類型
點擊 Panel Title
-> Edit
進入 Panel 編輯頁面掏熬,并在 Metrics
中
的 Metric lookup
選擇 go_goroutines
你也可以直接在管理界面中填寫 Prometheus 的查詢語句,以及修改查詢的 step 數(shù)值秒梅。
當你修改了 Dashboard 后旗芬,記得點擊頂部的 Save dashboard
按鈕,或直接 CTRL+S
保存捆蜀。
至此疮丛,我們自定義的 Panel 已添加完成
我們可以通過拖拽,拉升調(diào)節(jié) panel 的位置和尺寸辆它,我們調(diào)節(jié)的目的是盡量在一個屏幕顯示更多信息誊薄。
總結(jié)
Grafana 是一款非常漂亮,強大的監(jiān)視分析平臺锰茉,本身支持了 Prometheus 數(shù)據(jù)源呢蔫,所以在做數(shù)據(jù)和監(jiān)視可視化的時候,Grafana + Prometheus 是個不錯的選擇飒筑。
全局配置
global
屬于全局的默認配置片吊,它主要包含 4 個屬性,
- scrape_interval: 拉取 targets 的默認時間間隔协屡。
- scrape_timeout: 拉取一個 target 的超時時間俏脊。
- evaluation_interval: 執(zhí)行 rules 的時間間隔。
- external_labels: 額外的屬性著瓶,會添加到拉取的數(shù)據(jù)并存到數(shù)據(jù)庫中联予。
配置文件結(jié)構(gòu)大概為:
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
scrape_timeout: 10s # is set to the global default (10s).
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'