# 基本概念
## DATA MODEL (數據模型)
Prometheus 從根本上將所有數據存儲為[時間序列( time series) ](http://en.wikipedia.org/wiki/Time_series):屬于同一個 metrics 的時間戳值的數據流和相同的一組標記維度。 除了存儲的時間序列之外, Prometheus 還可以生成臨時導出的時間序列作為查詢的結果。
### Metric names and labels ( metrics 名稱和標簽)
每個時間序列都由其 metrics 名稱和一組鍵值對(也稱為標簽)唯一標識。
metrics 名稱指定被測量的系統的一般特征(例如, `http_requests_total` - 接收到的 HTTP 請求的總數)。它可以包含 ASCII 字母和數字,以及下劃線和冒號,即必須匹配正則表達式 `[a-zA-Z_:][a-zA-Z0-9_:]*` 。
標簽使 Prometheus 的維度數據模型成為可能:相同 metrics 名稱的任何給定的標簽組合標識該 metrics 的特定維度實例(如:所有使用 `POST` 方法到 `/api/tracks` 處理程序的 HTTP 請求)。查詢語言允許基于這些維度進行篩選和聚合。更改任何標簽值(包括添加或刪除標簽)將創建新的時間序列。
標簽名稱可以包含 ASCII 字母,數字以及下劃線。它們必須匹配正則表達式 `[a-zA-Z_][a-zA-Z0-9_]*` 。以 `__` 開頭的標簽名稱保留供內部使用。
標簽值可能包含任何 Unicode 字符。
另請參閱[命名 metrics 和標簽的最佳實踐](https://prometheus.io/docs/practices/naming/)。
### Samples (樣本)
樣本形成實際的時間序列數據。每個樣品包括:
* 一個 float64 值
* 一個毫秒精度的時間戳
### Notation (符號)
給定一個 metrics 名稱和一組標簽,時間序列通常用這個標記來標識:
```
<metric name>{<label name>=<label value>, ...}
```
例如,metrics name 為 `api_http_requests_total` ,標簽 `method="POST"` , `handler="/ messages"` 的時間序列可以這樣寫:
```
api_http_requests_total{method="POST", handler="/messages"}
```
這與 [OpenTSDB](http://opentsdb.net/) 使用的符號相同。
## METRIC TYPES ( metrics 數據類型)
Prometheus 客戶端庫提供了四種核心 metrics 數據類型。目前這些功能僅在客戶端庫和有線協議( wire protocol )中有所不同(為了使 API 適合特定類型的使用)。Prometheus 服務端尚未使用類型信息,而是將所有數據變為無類型的時間序列。這在未來端更新可能會有所改變。
### Counter (計數器)
計數器是一個累計類型端 metrics ,它代表了一個只有沒次累計的數值。通常使用計數器來計數服務的請求、完成的任務、發生的錯誤等等。計數器不應該被用來顯示其數目也可以減少的項目的當前計數,如:當前正在運行的進程的數量,這個用例適合使用 Gauges。
Counter 的客戶端庫使用文檔:
* [Go](http://godoc.org/github.com/prometheus/client_golang/prometheus#Counter)
* [Java](https://github.com/prometheus/client_java/blob/master/simpleclient/src/main/java/io/prometheus/client/Counter.java)
* [Python](https://github.com/prometheus/client_python#counter)
* [Ruby](https://github.com/prometheus/client_ruby#counter)
### Gauge
Gauge 代表一個可以任意上下的單個數值。
Gauge 通常用于測量值,如溫度或當前的內存使用情況,但也可以上下“計數”,如正在運行的進程的數量。
Gauge 的客戶端庫使用文檔:
* [Go](http://godoc.org/github.com/prometheus/client_golang/prometheus#Gauge)
* [Java](https://github.com/prometheus/client_java/blob/master/simpleclient/src/main/java/io/prometheus/client/Gauge.java)
* [Python](https://github.com/prometheus/client_python#gauge)
* [Ruby](https://github.com/prometheus/client_ruby#gauge)
### Histogram
Histogram (直方圖)對觀察結果進行采樣(通常是請求持續時間或響應大小),并將其計入可配置的 buckets 中。它也提供了所有觀測值的總和。
metrics 名稱為 `<basename>` 的直方圖在收集期間公開多個時間序列:
* 觀察桶的累計計數器顯示為 `<basename>_bucket {le="<upper inclusive bound>"}`