1オン機能は長所と短所だけでなく、使用の展開、いくつかの例は、モニタリング指標は使用方法カスタムの自分自身を思い出させるために、このマシンをpushgateway紹介しています。
まず、容器の監視は、開始時刻(シェル)
2ヶ月となってプロメテウスを使用していますが、(同様の指標があるコンテナを作成するための時間である)コンテナインデックスを実行するための時間を見つけることはありません。カスタム監視指標を学習した後、最初のインスタンスは、それはそれを得るためにする必要があります。
前提条件はpushagatewayを展開しています!
監視対象マシン(Linux)のでは、次のスクリプトを作成します
#!/ binに/ bashのを allnameドッカーPS = `--format ".Names {} {}" #`、実行中のすべての船舶の名前を取得する 関数dockerruntime(){ T = `ドッカーは、-f点検「{} {.State.StartedAt }「$#1 'の各容器の開始時刻取得 T1 = `日付+%sの-d "$ tの"`#は、 タイムスタンプに変換 #S` T2 = `日付+%を現在時刻のタイムスタンプが取得 TTを聞かせ=算出したT2-T1の#ランタイム ますecho $ TTを } sudoをRM -fa エコー"" "#はTYPEゲージdocker_runtime HELP docker_runtime#時間秒" "" #>>ファイルのデータ書き込みにアップロードpushgateway で$ {私のために} allnameは ない T $ = `dockerruntime i` "docker_runtime {名= \" $私は\ "} $ Tを"エコー>>#フォーマットされたデータは、$ Iのブロックされます単一引用符を使用するように記述することはできません DONE カール--data-バイナリ"@a" HTTP:// pushgatewayIP:9091 /メトリック/仕事/ docker_runtime /インスタンス/ XA-LSR-billubuntu#ファイルでアップロードデータの特定のURLの数にパラメータ名とアドレスを変更する にsudo RMの-fa#が一時ファイルを空にする
着陸のWebUI pushgatewayの実行後、スクリプトに実行権限を追加します。
あなたは「docker_runtime」と呼ばれる監視対象マシン上の3つのコンテナ、各ジョブの名前に検索を意味し、機械を監視するPUSHデータをpushgatewayを見ることができます
一度15Sまたは30秒を行う、上記のスクリプトは、わずかに、改変することができる時間に関する要件がある場合、スクリプトは、1分あたり、定期的にスケジュールされたタスクを追加しています。
今すぐクエリボックスプロメテウス「docker_runtime」でクエリを入力して上記のデータを取得することができます。
[注]
データの種類をアップロードすることに注意してください
アップロードデータ型がUNTYPEある場合プロメテウスはお受けできませんpushgatewayデータが得られ、認識されないように!そのため、特別な注意が送信されたデータをフォーマットする必要があります。
データ型は4つしかカウンターゲージの概要ヒストグラムです
二、パイソンpushgatewayにデータを送信します
クライアントのインストールプロメテウス
prometheus_clientをインストールするPIP
1、カウンタータイプ
#counterは、再起動時間が0に設定され、成長しているタスクの数だけ上昇している
提案のページを構築するためにフラスコを使用して#を
輸入prometheus_client prometheus_client輸入カウンターから prometheus_client.coreインポートCollectorRegistryから フラスコインポートレスポンス、フラスコから アプリ=フラスコ(__ name__) requests_total =カウンター( "たrequest_count"、 "ホストの合計要求COUT") @ app.route( "/メトリック" ) デフrequests_count(): requests_total.inc() #のrequests_total.inc(2)每一次刷新会2增加 リターン応答(prometheus_client.generate_latest(requests_total)、 MIMEタイプ= "text / plainの") @ app.route( '/' ) デフインデックス(): requests_total.inc() の戻り"Hello World"の 場合__name__ == "__main__": app.run(ホスト= "0.0.0.0")
結果:
2、gauageタイプ
輸入prometheus_client prometheus_client輸入カウンターから、ゲージ prometheus_client.coreインポートCollectorRegistryから フラスコインポート応答から、フラスコ アプリ=フラスコ(__ name__) 、G =ゲージ(「random_value」、「要求のランダム値」) app.route @( "/メトリック") DEF S(): オープン(と" A.TXT "Fとして、 'R'): NUM = f.read() g.set(NUM) リターン応答(prometheus_client.generate_latest(G)、 MIMEタイプ="テキスト/無地」) @ app.route( '/') DEFインデックス(): requests_total.inc() の戻り"Hello World"の __name__場合== "__main__": app.run(ホスト= "0.0.0.0")
結果:
上記の効果は、地元の小さなウェブサイトを生成することで送信、次のステップはpushgatewayために、選択されたデータであり、
#在被监控机上写python代码 #CollectorRegistry可以同时注册多个自定义指标并返回给prometheus importprometheus_client fromprometheus_clientimportGauge fromprometheus_client.coreimportCollectorRegistry importrequests defv1(): #获取监控数据的值 return2.3 defv2(): return3.60 n1=v1() n2=v2() REGISTRY=CollectorRegistry(auto_describe=False) #自定义指标必须利用CollectorRegistry进行注册,注册后返回给prometheus #CollectorRegistry必须提供register,一个指标收集器可以注册多个collectoryregistry jin=Gauge("jin_kou","zhegezuoyongshijinkoudaxiao",["l1",'l2','instance'],registry=REGISTRY) chu=Gauge("chu_kou","zhegezuoyongshichukoudaxiao",["l1",'l2','instance'],registry=REGISTRY) #“jin_kou” 指标名称 # "zhegezuoyongshichukoudaxiao" 指标的注释信息 # "[]" 定义标签的类别及个数 jin.labels(l1="label1",l2="label2",instance="windows1").inc(n1) chu.labels(l1="label1",l2="label2",instance="windows1").inc(n2) #“[]”中有几个,就需要写几个个数要完全一致 requests.post("http://pushgatewayIP:9091/metrics/job/python/",data=prometheus_client.generate_latest(REGISTRY)) #向指定的API发送post信息,将注册的信息发过去 #API中的 “python”是 job的名字
结果: