基于Rancher k8s部署Prometheus 監(jiān)控swoole業(yè)務(wù)核心指標(biāo)實(shí)戰(zhàn)

keyword Rancher Prometheus swoole docker docker-compose

Prometheus

特性

Prometheus 是由SoundCloud開發(fā)的開源監(jiān)控報(bào)警系統(tǒng)和時序列數(shù)據(jù)庫(TSDB)。Prometheus使用Go語言開發(fā)撤防,是Google BorgMon監(jiān)控系統(tǒng)的開源版本, 性能也足夠支撐上萬臺規(guī)模集群.

  • 多維度數(shù)據(jù)模型
  • 靈活的查詢語言
  • 不依賴分布式存儲岗照,單個服務(wù)器節(jié)點(diǎn)是自主的
  • 通過基于HTTP的pull方式采集時序數(shù)據(jù)
  • 可以通過中間網(wǎng)關(guān)進(jìn)行時序列數(shù)據(jù)推送
  • 通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置來發(fā)現(xiàn)目標(biāo)服務(wù)對象
  • 支持多種多樣的圖表和界面展示淹遵,比如Grafana等

基本原理

Prometheus 通過使用http協(xié)議周期拉取配置的指標(biāo)項(xiàng)(Metrics), 并將數(shù)據(jù)通過一定規(guī)則整理清洗, 存儲到新的時間序列中. 在本次實(shí)戰(zhàn)中將對業(yè)務(wù)使用的php swoole進(jìn)行核心指標(biāo)監(jiān)控并通過grafana 圖形化工具進(jìn)行輸出展示.

搭建步驟

Prometheus docker本地編排

對于直接在rancher 上部署, 我們可以在本地使用docker-compose 本地編排實(shí)驗(yàn)后進(jìn)行k8s 遠(yuǎn)程部署, 在本地部署使用docker-compose 模擬k8s容器編排, 便于開發(fā)實(shí)驗(yàn).

首先創(chuàng)建一個monitor文件夾作為此次項(xiàng)目的路徑

$ mkdir monitor && cd monitor

創(chuàng)建prometheus文件夾, 用來存放我們的監(jiān)控配置文件

$ mkdir prometheus && cd prometheus && touch prometheus.yml

prometheus.yml配置文件中添加以下內(nèi)容

global:
  scrape_interval:     30s # 全局周期
scrape_configs:
- job_name: 'foo' # 作業(yè)名稱
  scrape_interval: 30s # 調(diào)用周期
  metrics_path: "/health/metrics" # 調(diào)用路徑
  static_configs:
    - targets: ['foo.com:80'] # 遠(yuǎn)程服務(wù)地址

在上面的配置文件中我們指明了foo這個監(jiān)控作業(yè), 并指定運(yùn)行周期30s, 每次調(diào)用地址為 foo.com:80/health/metrics這個接口地址. 具體這個接口我們應(yīng)該如何輸出數(shù)據(jù), 下邊會具體提到.

monitor文件夾根路徑創(chuàng)建docker-compose.yml文件

$ touch docker-compose.yml

并加入以下內(nèi)容

version: '2'
services:
    prometheus:
        container_name: prometheus # 容器名稱
        image: prom/prometheus # 鏡像名稱
        networks: # 共享網(wǎng)絡(luò)
            - foo
        volumes:
            - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 將本地配置文件,掛載到目標(biāo)容器/etc/prometheus/prometheus.yml位置
        ports:
            - '9090:9090'
        command:
            - '--config.file=/etc/prometheus/prometheus.yml'
            - '--web.enable-admin-api'
            - '--web.enable-lifecycle' # 支持配置文件熱更新

    grafana:
        container_name: grafana
        image: grafana/grafana:6.4.3
        ports:
            - '3000:3000'
        depends_on:
            - prometheus # 依賴 prometheus 服務(wù)后啟動
        networks:
            - foo
        environment:
            GF_SECURITY_ADMIN_USER: ${GRAFANA_USERNAME} # grafana 用戶名(變量)
            GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD}

networks: # 定義外部網(wǎng)絡(luò), 便于服務(wù)間訪問
    foo:
        external: true

此處重點(diǎn)說明一下 prometheus 服務(wù)中command 選項(xiàng)中的配置書寫問題, 因?yàn)?prom/prometheus鏡像已經(jīng)有程序入口并已經(jīng)配置--config.file--web.enable-admin-api, 此時我們只需要追加啟動命令的web.enable-lifecycle表示開啟服務(wù)熱更新監(jiān)控配置, 如果只寫最后,會導(dǎo)致前邊兩項(xiàng)無配置, 服務(wù)將會缺少配置而無法啟動.

Swoole 接口

在Swoole 項(xiàng)目中, 編寫接口/health/metrics/ 內(nèi)容如下:

$server = new Swoole\Http\Server("127.0.0.1", 80); // 此處只是展示$server對象類型, 具體server對象需從當(dāng)前項(xiàng)目框架中進(jìn)行獲取, 不要自己再次實(shí)例化.
$metrics = $server->stats();
 foreach ($metrics as $k => $v) {
     echo sprintf("%s %s\n", $k, $v);
 }
 echo "# 協(xié)程狀態(tài)\n";

 $metrics = Swoole\Coroutine::stats();
 foreach ($metrics as $k => $v) {
     echo sprintf("%s %s\n", $k, $v);
 }

訪問 http://127.0.0.1:80/health/metrics/ 將會有以下輸出

start_time 1573612504
connection_num 1
accept_count 7
close_count 6
worker_num 2
idle_worker_num 1
tasking_num 0
request_count 10
worker_request_count 0
worker_dispatch_count 11
coroutine_num 1
# 協(xié)程狀態(tài)
event_num 2
signal_listener_num 0
aio_task_num 0
c_stack_size 2097152
coroutine_num 1
coroutine_peak_num 1
coroutine_last_cid 3

具體參數(shù)含義可自行查看Swoole 文檔獲取詳細(xì)解釋.

開啟監(jiān)控服務(wù)

進(jìn)入monitor目錄, 執(zhí)行docker-compose up -d, 此時可能會提示外部網(wǎng)絡(luò)不存在, 按照提示進(jìn)行創(chuàng)建即可. 當(dāng)服務(wù)啟動完成后訪問 http://127.0.0.1:9090 可看到Prometheus Web界面.

Prometheus 主界面

訪問 http://127.0.0.1:9090/targets

已監(jiān)控列表

此時 Prometheus服務(wù)已經(jīng)正常監(jiān)控

訪問 http://127.0.0.1:3000/ 點(diǎn)擊 Add data source, 選擇Prometheus為數(shù)據(jù)源

Grafana 添加數(shù)據(jù)源

在HTTP URL 一項(xiàng)中輸入 http://prometheus:9090 ,因?yàn)楸镜厝萜魇褂昧讼嗤木W(wǎng)絡(luò), 可以直接使用服務(wù)名稱進(jìn)行服務(wù)訪問.

Grafana 保存數(shù)據(jù)源并測試連接性

點(diǎn)擊grafana Home, New dashboard, Chose Visualization, 選擇 Graph

選擇可視化方式

點(diǎn)擊 queries, 選中QueryPrometheus

配置顯示項(xiàng)

在A 中Metrics添加指標(biāo)項(xiàng), 可使用Legend增加指標(biāo)項(xiàng)說明,點(diǎn)擊Add Query 可在一張圖表中繪制多個指標(biāo)折線.至此本地部署已完成.

Rancher K8S 部署

rancher 中部署也是一樣的, 唯一的區(qū)別就是, 使用rancher 作為容器編排工具. 打開rancher, 并點(diǎn)擊部署服務(wù)

rancher 主頁

填寫鏡像為 prom/prometheus, 并配置數(shù)據(jù)卷, 為的將監(jiān)控配置yml文件進(jìn)行掛載容器.此處掛載使用可參照rancher 文檔.

在命令中加入 --config.file=/etc/prometheus/prometheus.yml --web.enable-admin-api --web.enable-lifecycle

添加啟動命令

點(diǎn)擊最下方啟動按鈕, 并配置工作負(fù)載中負(fù)載均衡

配置負(fù)載均衡

此時通過本地訪問grafana.google.com 即可訪問對應(yīng)服務(wù), 若無公網(wǎng)dns, 則需本地修改 /etc/hosts.

后續(xù)可按照本地搭建模式相同配置grafana, 本文不再重復(fù)贅述.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蠢笋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子整以,更是在濱河造成了極大的恐慌凫乖,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咏删,死亡現(xiàn)場離奇詭異惹想,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)督函,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門嘀粱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辰狡,你說我怎么就攤上這事锋叨。” “怎么了宛篇?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵娃磺,是天一觀的道長。 經(jīng)常有香客問我叫倍,道長偷卧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任吆倦,我火速辦了婚禮听诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚕泽。我一直安慰自己晌梨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仔蝌,像睡著了一般泛领。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敛惊,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天渊鞋,我揣著相機(jī)與錄音,去河邊找鬼豆混。 笑死篓像,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的皿伺。 我是一名探鬼主播员辩,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸵鸥!你這毒婦竟也來了奠滑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妒穴,失蹤者是張志新(化名)和其女友劉穎宋税,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讼油,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杰赛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矮台。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乏屯。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘦赫,靈堂內(nèi)的尸體忽然破棺而出辰晕,到底是詐尸還是另有隱情,我是刑警寧澤确虱,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布含友,位于F島的核電站,受9級特大地震影響校辩,放射性物質(zhì)發(fā)生泄漏窘问。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一宜咒、第九天 我趴在偏房一處隱蔽的房頂上張望惠赫。 院中可真熱鬧,春花似錦荧呐、人聲如沸汉形。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽概疆。三九已至,卻和暖如春峰搪,著一層夾襖步出監(jiān)牢的瞬間岔冀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工概耻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留使套,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓鞠柄,卻偏偏與公主長得像侦高,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厌杜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359