Prometheus2.0 從入門到放棄

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 架構(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)來查看,比如

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)試工作梅桩,非常方便,例如:

prometheus web console
prometheus web graph

通過上圖你不難發(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

grafana-login

在 Dashboard 首頁旭蠕,點擊添加數(shù)據(jù)源

grafana-datasource

配置 Prometheus 數(shù)據(jù)源

grafana-prometheus-data-source

目前為止,Grafana 已經(jīng)和 Prometheus 連上了旷坦,你將看到這樣的 Dashboard

grafana-default-dashbord

自定義監(jiān)視畫板

由頂部 Manage dashboard -> Settings 進入管理頁面

rafana-into-manage-dashboard

在管理頁面中取消 Hide Controls

grafana-hide-controls

點擊頁面底部 + ADD ROW 按鈕, 并選擇 Graph 類型

grafana-add-graph

點擊 Panel Title -> Edit 進入 Panel 編輯頁面掏熬,并在 Metrics
Metric lookup 選擇 go_goroutines

grafana-edit-panel

你也可以直接在管理界面中填寫 Prometheus 的查詢語句,以及修改查詢的 step 數(shù)值秒梅。

當你修改了 Dashboard 后旗芬,記得點擊頂部的 Save dashboard 按鈕,或直接 CTRL+S 保存捆蜀。

至此疮丛,我們自定義的 Panel 已添加完成

grafana-added-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'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啼县,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沸久,更是在濱河造成了極大的恐慌季眷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卷胯,死亡現(xiàn)場離奇詭異子刮,居然都是意外死亡,警方通過查閱死者的電腦和手機窑睁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門挺峡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人担钮,你說我怎么就攤上這事橱赠。” “怎么了箫津?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵狭姨,是天一觀的道長。 經(jīng)常有香客問我苏遥,道長饼拍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任田炭,我火速辦了婚禮师抄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘教硫。我一直安慰自己叨吮,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布栋豫。 她就那樣靜靜地躺著挤安,像睡著了一般谚殊。 火紅的嫁衣襯著肌膚如雪丧鸯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天嫩絮,我揣著相機與錄音丛肢,去河邊找鬼。 笑死剿干,一個胖子當著我的面吹牛蜂怎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播置尔,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼杠步,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幽歼,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤朵锣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后甸私,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诚些,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年皇型,在試婚紗的時候發(fā)現(xiàn)自己被綠了诬烹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡弃鸦,死狀恐怖绞吁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唬格,我是刑警寧澤掀泳,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站西轩,受9級特大地震影響员舵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藕畔,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一马僻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧注服,春花似錦韭邓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辜御,卻和暖如春鸭你,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擒权。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工袱巨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碳抄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓愉老,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剖效。 傳聞我的和親對象是個殘疾皇子嫉入,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 基于Grafana和Prometheus的監(jiān)視系統(tǒng) 1. Prometheus 1.1 Prometheus 介紹...
    醉里挑燈A閱讀 41,921評論 0 22
  • Prometheus Prometheus是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合,起始是由SoundClou...
    YichenWong閱讀 19,321評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理焰盗,服務發(fā)現(xiàn),斷路器咒林,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Prometheus Querying 查詢 prometheus提供了功能性表達式語言姨谷,可讓用戶對于時間序列的數(shù)...
    YichenWong閱讀 43,890評論 6 7
  • 西風古道,流水小橋 行夜半忽夢映九,紅顏奴嬌 路迢迢梦湘,水迢迢,功名盡在遠征道 英雄年少 金甲件甥,寒光依照捌议,紅顏!憔悴了引有!
    珞木閱讀 328評論 0 5