<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)時(shí)監(jiān)控:基于流計(jì)算 Oceanus ( Flink ) 實(shí)現(xiàn)系統(tǒng)和應(yīng)用級(jí)實(shí)時(shí)監(jiān)控

          共 7782字,需瀏覽 16分鐘

           ·

          2021-10-16 07:35


          作者:吳云濤,騰訊?CSIG?高級(jí)工程師

          本文描述了如何使用騰訊云大數(shù)據(jù)組件來完成實(shí)時(shí)監(jiān)控系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),通過實(shí)時(shí)采集并分析云服務(wù)器(CVM)及其 App 應(yīng)用的 CPU和內(nèi)存等資源消耗數(shù)據(jù),以短信、電話、微信消息等方式實(shí)時(shí)反饋監(jiān)控告警信息,高效地保障系統(tǒng)穩(wěn)健運(yùn)行。運(yùn)用云化的 Kafka、Flink、ES 等組件,大大減少了開發(fā)運(yùn)維人員的投入。

          一、解決方案描述

          (一)概述

          本方案結(jié)合騰訊云 CKafka、流計(jì)算 Oceanus (Flink)、 Elasticsearch、Prometheus 等,通過 Filebeat 實(shí)時(shí)采集系統(tǒng)和應(yīng)用監(jiān)控?cái)?shù)據(jù),并傳輸?shù)?CKafka,再將 CKafka 數(shù)據(jù)接入流計(jì)算 Oceanus (Flink),經(jīng)過簡(jiǎn)單的業(yè)務(wù)邏輯處理輸出到 Elasticsearch,最后通過 Kibana 頁面查詢結(jié)果。方案中利用 Promethus 監(jiān)控系統(tǒng)指標(biāo),如流計(jì)算 Oceanus 作業(yè)運(yùn)行狀況,利用云 Grafana 監(jiān)控 CVM 或業(yè)務(wù)應(yīng)用指標(biāo)。

          (二)方案架構(gòu)?



          二、前置準(zhǔn)備

          在實(shí)現(xiàn)本方案前,請(qǐng)確保已創(chuàng)建并配置了相應(yīng)的大數(shù)據(jù)組件。

          (一)創(chuàng)建私有網(wǎng)絡(luò) VPC

          私有網(wǎng)絡(luò)(VPC)是一塊您在騰訊云上自定義的邏輯隔離網(wǎng)絡(luò)空間,在構(gòu)建 CKafka、流計(jì)算 Oceanus,Elasticsearch 集群等服務(wù)時(shí)選擇建議同一個(gè) VPC。具體創(chuàng)建步驟請(qǐng)參考 幫助文檔 (https://cloud.tencent.com/document/product/215/36515)。

          (二)創(chuàng)建 CKafka 實(shí)例

          Kafka 建議選擇最新的 2.4.1 版本,和 Filebeat 采集工具兼容性較好。
          購買完成后,再創(chuàng)建 Kafka topic: topic-app-info

          (三)創(chuàng)建流計(jì)算 Oceanus 集群

          流計(jì)算 Oceanus 是大數(shù)據(jù)產(chǎn)品生態(tài)體系的實(shí)時(shí)化分析利器,是基于 Apache Flink 構(gòu)建的具備一站開發(fā)、無縫連接、亞秒延時(shí)、低廉成本、安全穩(wěn)定等特點(diǎn)的企業(yè)級(jí)實(shí)時(shí)大數(shù)據(jù)分析平臺(tái)。流計(jì)算 Oceanus 以實(shí)現(xiàn)企業(yè)數(shù)據(jù)價(jià)值最大化為目標(biāo),加速企業(yè)實(shí)時(shí)化數(shù)字化的建設(shè)進(jìn)程。
          在流計(jì)算 Oceanus 控制臺(tái)的【集群管理】->【新建集群】頁面創(chuàng)建集群,具體步驟請(qǐng)參考幫助文檔(https://cloud.tencent.com/document/product/849/48298)。

          (四)創(chuàng)建 Elasticsearch 實(shí)例

          在 Elasticsearch 控制臺(tái),點(diǎn)擊左上角【新建】創(chuàng)建集群,具體步驟請(qǐng)參考幫助文檔(https://cloud.tencent.com/document/product/845/19536)? 。

          (五)創(chuàng)建云監(jiān)控 Prometheus 實(shí)例

          為了展示自定義系統(tǒng)指標(biāo),需購買 Promethus 服務(wù)。只需要自定業(yè)務(wù)指標(biāo)的同學(xué)可以省略此步驟。

          進(jìn)入云監(jiān)控控制臺(tái),點(diǎn)擊左側(cè) 【Prometheus 監(jiān)控】,新建 Promethus 實(shí)例,具體的步驟請(qǐng)參考幫助文檔 (https://cloud.tencent.com/document/product/1416/55982)。

          (六)創(chuàng)建獨(dú)立 Grafana 資源

          獨(dú)立的 Grafana 在灰度發(fā)布中,需在 Grafana 管理頁面(https://console.cloud.tencent.com/monitor/grafana)進(jìn)行單獨(dú)購買,以實(shí)現(xiàn)業(yè)務(wù)監(jiān)控指標(biāo)的展示。

          (七)安裝配置 Filebeat

          Filebeat 是一款輕量級(jí)日志數(shù)據(jù)采集的工具,通過監(jiān)控指定位置的文件收集信息。在該 VPC 下給需要監(jiān)控主機(jī)信息和應(yīng)用信息的云服務(wù)器上安裝 Filebeat。安裝方式一:下載 Filebeat 并安裝。下載地址(https://www.elastic.co/cn/downloads/beats/filebeat);方式二:采用【Elasticsearch 管理頁面】-->【beats 管理】中提供的 Filebeat。本示例中采用了方式一。下載到 CVM 中并配置 Filebeat,在 filebeat.yml 文件中添加如下配置項(xiàng):?
          # 監(jiān)控日志文件配置- type: logenabled: truepaths:   - /tmp/test.log   #- c:\programdata\elasticsearch\logs\*
          # 監(jiān)控?cái)?shù)據(jù)輸出項(xiàng)配置output.kafka:version: 2.0.0                         # kafka版本號(hào)hosts: ["xx.xx.xx.xx:xxxx"]       # 請(qǐng)?zhí)顚憣?shí)際的IP地址+端口topic: 'topic-app-info'           # 請(qǐng)?zhí)顚憣?shí)際的topic
          請(qǐng)根據(jù)實(shí)際業(yè)務(wù)需求配置相對(duì)應(yīng)的 Filebeat.yml 文件,參考 Filebeat 官方文檔(https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html)
          注:示例選用2.4.1的 CKafka 版本,這里配置 version: 2.0.0。版本對(duì)應(yīng)不上可能出現(xiàn)“ERROR ? [kafka] kafka/client.go:341 ? ? Kafka (topic=topic-app-info): dropping invalid message”錯(cuò)誤



          三、方案實(shí)現(xiàn)

          接下來通過案例介紹如何通過流計(jì)算 Oceanus 實(shí)現(xiàn)個(gè)性化監(jiān)控。

          (一)Filebeat 采集數(shù)據(jù)

          1進(jìn)入到 Filebeat 根目錄下,并啟動(dòng) Filebeat 進(jìn)行數(shù)據(jù)采集。示例中采集了 top 命令中顯示的 CPU、內(nèi)存等信息,也可以采集 jar 應(yīng)用的日志、JVM 使用情況、監(jiān)聽端口等,詳情參考 Filebeat 官網(wǎng)

          (https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html)

          # filebeat啟動(dòng)
          ./filebeat -e -c filebeat.yml

          # 監(jiān)控系統(tǒng)信息寫入test.log文件
          top -d 10 >>/tmp/test.log

          2、進(jìn)入 CKafka 頁面,點(diǎn)擊左側(cè)【消息查詢】,查詢對(duì)應(yīng) topic 消息,驗(yàn)證是否采集到數(shù)據(jù)。

          Filebeat 采集到的 Kafka 的數(shù)據(jù)格式:
          {  "@timestamp": "2021-08-30T10:22:52.888Z",  "@metadata": {    "beat": "filebeat",    "type": "_doc",    "version": "7.14.0"  },  "input": {    "type": "log"  },  "host": {    "ip": ["xx.xx.xx.xx", "xx::xx:xx:xx:xx"],    "mac": ["xx:xx:xx:xx:xx:xx"],    "hostname": "xx.xx.xx.xx",    "architecture": "x86_64",    "os": {      "type": "linux",      "platform": "centos",      "version": "7(Core)",      "family": "redhat",      "name": "CentOSLinux",      "kernel": "3.10.0-1062.9.1.el7.x86_64",      "codename": "Core"    },    "id": "0ea734564f9a4e2881b866b82d679dfc",    "name": "xx.xx.xx.xx",    "containerized": false  },  "agent": {    "name": "xx.xx.xx.xx",    "type": "filebeat",    "version": "7.14.0",    "hostname": "xx.xx.xx.xx",    "ephemeral_id": "6c0922a6-17af-4474-9e88-1fc3b1c3b1a9",    "id": "6b23463c-0654-4f8b-83a9-84ec75721311"  },  "ecs": {    "version": "1.10.0"  },  "log": {    "offset": 2449931,    "file": {      "path": "/tmp/test.log"    }  },  "message": "(B[m16root0-20000S0.00.00:00.00kworker/1:0H(B[m[39;49m[K"}
          (二)創(chuàng)建 Flink SQL 作業(yè)
          使用流計(jì)算 Oceanus 對(duì) CKafka 接入的數(shù)據(jù)進(jìn)行加工處理,并存入 Elasticsearch。

          1、定義 Source

          按照 Filebeat 中 json 消息的格式,構(gòu)造 Flink Table Source。
          CREATE TABLE DataInput (    `@timestamp` VARCHAR,    `host`       ROW<id VARCHAR,ip ARRAY<VARCHAR>>,    `log`       ROW<`offset` INTEGER,file ROW<path VARCHAR>>,    `message`    VARCHAR) WITH (    'connector' = 'kafka',   -- 可選 'kafka','kafka-0.11'. 注意選擇對(duì)應(yīng)的內(nèi)置 Connector    'topic' = 'topic-app-info',  -- 替換為您要消費(fèi)的 Topic    'scan.startup.mode' = 'earliest-offset',     'properties.bootstrap.servers' = '10.0.0.29:9092',      'properties.group.id' = 'oceanus_group2',  -- 必選參數(shù), 一定要指定 Group ID    'format' = 'json',    'json.ignore-parse-errors' = 'true',     -- 忽略 JSON 結(jié)構(gòu)解析異常    'json.fail-on-missing-field' = 'false'   -- 如果設(shè)置為 true, 則遇到缺失字段會(huì)報(bào)錯(cuò) 設(shè)置為 false 則缺失字段設(shè)置為 null);
          2、定義 Sink
          CREATE TABLE es_output (  `id` VARCHAR,  `ip` ARRAY<VARCHAR>,  `path` VARCHAR,  `num` INTEGER,  `message` VARCHAR,  `createTime` VARCHAR) WITH (   'connector.type' = 'elasticsearch',    'connector.version' = '6',    'connector.hosts' = 'http://10.0.0.175:9200',     'connector.index' = 'oceanus_test2',     'connector.document-type' = '_doc',     'connector.username' = 'elastic',     'connector.password' = 'yourpassword',   'update-mode' = 'upsert',  -- 可選無主鍵的 'append' 模式,或有主鍵的 'upsert' 模式       'connector.key-null-literal' = 'n/a',  -- 主鍵為 null 時(shí)的替代字符串,默認(rèn)是 'null'                                                  'format.type' = 'json'        -- 輸出數(shù)據(jù)格式, 目前只支持 'json');
          3、加工業(yè)務(wù)數(shù)據(jù)
          INSERT INTO es_outputSELECT    host.id as `id`,    host.ip as `ip`,    log.file.path as `path`,    log.`offset` as `num`,    message,    `@timestamp` as `createTime`from DataInput;

          4、配置作業(yè)參數(shù)

          【內(nèi)置 connector】選擇flink-connector-elasticsearch6flink-connector-kafka
          注: 根據(jù)實(shí)際版本選擇

          5、查詢 ES 數(shù)據(jù)

          在 ES 控制臺(tái)的 Kibana 頁面查詢數(shù)據(jù),或者進(jìn)入某臺(tái)相同子網(wǎng)的 CVM 下,使用以下命令進(jìn)行查詢:
          # 查詢索引 username:password請(qǐng)?zhí)鎿Q為實(shí)際賬號(hào)密碼curl -XGET -u username:password http://xx.xx.xx.xx:xxxx/oceanus_test2/_search -H 'Content-Type: application/json' -d'{   "query": { "match_all": {}},   "size":  10}'
          更多訪問方式請(qǐng)參考 訪問 ES 集群(https://cloud.tencent.com/document/product/845/42868)

          (三)系統(tǒng)指標(biāo)監(jiān)控

          本章節(jié)主要實(shí)現(xiàn)系統(tǒng)信息監(jiān)控,對(duì) Flink 作業(yè)運(yùn)行狀況進(jìn)行監(jiān)控告警。
          Prometheus 是一個(gè)非常靈活的時(shí)序數(shù)據(jù)庫,通常用于監(jiān)控?cái)?shù)據(jù)的存儲(chǔ)、計(jì)算和告警。流計(jì)算 Oceanus 建議用戶使用騰訊云監(jiān)控提供的 Prometheus 服務(wù),以免去部署、運(yùn)維開銷;同時(shí)它還支持騰訊云的通知模板,可以通過短信、電話、郵件、企業(yè)微信機(jī)器人等方式,將告警信息輕松觸達(dá)不同的接收方。

          監(jiān)控配置 ?

          流計(jì)算 Oceanus 作業(yè)監(jiān)控
          除了流計(jì)算 Oceanus 控制臺(tái)自帶的監(jiān)控信息,還可以配置目前已經(jīng)支持了任務(wù)級(jí)細(xì)粒度監(jiān)控、作業(yè)級(jí)監(jiān)控和集群 Flink 作業(yè)列表監(jiān)控。
          1、流計(jì)算 Oceanus 作業(yè)詳情頁面,點(diǎn)擊【作業(yè)參數(shù)】,在【高級(jí)參數(shù)】處添加如下配置:
          pipeline.max-parallelism: 2048metrics.reporters: promgatewaymetrics.reporter.promgateway.host: xx.xx.xx.xx           # Prometheus實(shí)例地址metrics.reporter.promgateway.port: 9090                     # Prometheus實(shí)例端口metrics.reporter.promgateway.needBasicAuth: truemetrics.reporter.promgateway.password: xxxxxxxxxxx # Prometheus實(shí)例密碼metrics.reporter.promgateway.interval: 10 SECONDS
          2、在任一流計(jì)算 Oceanus 作業(yè)中,點(diǎn)擊【云監(jiān)控】進(jìn)入云 Prometheus 實(shí)例,點(diǎn)擊鏈接進(jìn)入Grafana(灰度中的 Grafana 不能由此進(jìn)入),導(dǎo)入 json 文件,詳情請(qǐng)參見 接入 Prometheus 自定義監(jiān)控
          (https://cloud.tencent.com/document/product/849/55239)。?
          3、展現(xiàn)出來的 Flink 任務(wù)監(jiān)控效果如下,用戶也可以點(diǎn)擊【Edit】設(shè)置不同 Panel 來優(yōu)化展現(xiàn)效果。?

          告警配置

          1、進(jìn)入騰訊云監(jiān)控界面,點(diǎn)擊左側(cè)【Prometheus 監(jiān)控】,點(diǎn)擊已購買的實(shí)例進(jìn)入服務(wù)管理頁面,點(diǎn)擊左側(cè)【告警策略】,點(diǎn)擊【新建】,配置相關(guān)信息。具體操作參考 接入 Prometheus 自定義監(jiān)控
          (https://cloud.tencent.com/document/product/849/55239)

          2、設(shè)置告警通知。選擇【選擇模版】或【新建】,設(shè)置通知模版。

          3、短信通知消息

          (四)業(yè)務(wù)指標(biāo)監(jiān)控

          通過 Filebeat 采集到應(yīng)用業(yè)務(wù)數(shù)據(jù),經(jīng)過流計(jì)算 Oceanus 服務(wù)進(jìn)行數(shù)據(jù)的加工處理并存入 ES,利用 ES + Grafana 來實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的監(jiān)控。

          1、Grafana 配置 ES 數(shù)據(jù)源。進(jìn)入灰度發(fā)布中的 Grafana 控制臺(tái)
          (https://console.cloud.tencent.com/monitor/grafana),進(jìn)入剛剛創(chuàng)建的 Grafana 服務(wù),找到外網(wǎng)地址打開并登錄,Grafana 賬號(hào)為 admin,登錄后點(diǎn)擊【Configuration】,點(diǎn)擊【Add Source】,搜索elasticsearch,填寫相關(guān) ES 實(shí)例信息,添加數(shù)據(jù)源。

          2、點(diǎn)擊左側(cè)【Dashboards】,點(diǎn)擊【Manage】,點(diǎn)擊右上角【New Dashboard】,新建面板,編輯面板。

          3、展現(xiàn)效果如下: ?
          • 總數(shù)據(jù)量寫入實(shí)時(shí)監(jiān)控:對(duì)寫入數(shù)據(jù)源的總數(shù)據(jù)量進(jìn)行監(jiān)控;?

          • 數(shù)據(jù)來源實(shí)時(shí)監(jiān)控:對(duì)來源于某個(gè)特定 log 的數(shù)據(jù)寫入量進(jìn)行監(jiān)控;?

          • 字段平均值監(jiān)控:對(duì)某個(gè)字段的平均值進(jìn)行監(jiān)控;?

          • num字段最大值監(jiān)控:對(duì) num 字段的最大值進(jìn)行監(jiān)控;

          注:本處只做示例,無實(shí)際業(yè)務(wù)

          四、總結(jié)

          本方案中對(duì)系統(tǒng)監(jiān)控指標(biāo)和業(yè)務(wù)監(jiān)控指標(biāo)2種監(jiān)控方案都進(jìn)行嘗試。若只需要對(duì)業(yè)務(wù)指標(biāo)進(jìn)行監(jiān)控,可省略 Promethus 相關(guān)操作。
          此外,需要注意的是:
          • CKafka 的版本和開源版本 Kafka 并沒有嚴(yán)格對(duì)應(yīng),方案中 CKafka2.4.1和開源 Filebeat-1.14.1版本能夠調(diào)試成功。

          • 云監(jiān)控中的 Promethus 服務(wù)已經(jīng)嵌入了 Grafana 監(jiān)控服務(wù)。但不支持自定義數(shù)據(jù)源,該嵌入的 Grafana 只能接入 Promethus,需使用獨(dú)立灰度發(fā)布的 Grafana 才能完成ES數(shù)據(jù)接入 Grafana。


          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天爽天天摸 | 东方aV成人在线看 | 欧美成人高清 | 青青视频在线免费观看 | 欧美大屌片 |