15分でKubernetesのPrometheusで監視





ご注意 perev。 :記事の著者であるGiancarlo Rubioは、ITリソースLINKIT (オランダ)のDevOpsエンジニアで、オンラインリソースITNEXTを通じて、Prometheusオペレーターを使用してKubernetesのPrometheusでモニタリングをセットアップするための簡潔なレシピを共有しています。 この指示は、プロジェクトがベアメタルからクラウドインフラストラクチャに移行した後、プロアクティブな監視システムの選択と実装に関する最近の経験の結果として登場しました。 このレシピは、理論上(記事の前半)および実用的(後半)の知り合いに最適です。 一部のチームでは、URLが修正されましたが、これは元の素材では、おそらく中型エンジンによって変換されていました。



K8sクラスターモニタリングは、チームの実装に役立ちます。





少し前、CoreOSがPrometheus Operatorを立ち上げました。これは私のニーズに完全に一致し、初期構成全体を簡素化しました。



Kubernetesオペレーター



「演算子、私たちはソフトウェアの新しいクラスを呼び出します。 オペレーターは、Kubernetes APIを拡張し、複雑なステートフルアプリケーションのインスタンスを作成および構成し、Kubernetesユーザーに代わってそれらを管理する機能を備えたアプリケーション固有のコントローラーです。 オペレーターはKubernetesのリソースとコントローラーの概念に基づいており、特定の分野またはアプリケーション固有の知識を追加して、基本的なタスクを自動化します。

-CoreOSのブランドンフィリップス。



Kubernetesのオペレーターは2016年に導入され、アプリケーションの展開と構成を抽象化する機能を提供します。 私自身は、 elasticsearch-operatorおよびprometheus-operatorと積極的に連携することができました。 Kubernetesの演算子の詳細な説明はこの記事の目的には含まれていません。興味のある方はここで他の利用可能な演算子のリストを読むことをお勧めします



ご注意 perev。 :Kubernetesの演算子と、ステートフルアプリケーションを操作するための使用について、 この記事で詳しく説明しました



プロメテウス



Prometheusは、 Google Borg Monitorに触発された、監視と通知(アラート)用のオープンソースユーティリティのセットです。 その開発はSoundCloudで始まり、その後CNCF基金に移されました。 translに注意てくださいこの記事では、最近プロメテウスの歴史について書いています 。)



プロメテウスは、 多くのプログラミング言語のアプリケーションをサポートしています。 インフラストラクチャとアプリケーションを監視するための優れたソリューションであり、有名なアプリケーション(PostgreSQL、MySQL、AWS Cloudwatchなど、K8など)を輸出業者として接続するための既製の統合も提供します。



プロメテウス演算子



「プロメテウスオペレーターの使命は、設定可能性を維持し、Kubernetesにネイティブ形式で設定しながら、Kubernetes上でPrometheusをできるだけ簡単に起動できるようにすることです。」

-プロメテウスオペレーターによる入門ガイド



Prometheusオペレーターは、K8でのサービスと展開の簡単な監視を提供し、Prometheus、Alertmanager、およびGrafanaの設定を管理します(詳細については以下を参照)



どのように機能しますか?





アーキテクチャプロメテウスオペレーター。 ソース: GitHub



アプリケーションの新しいバージョンをデプロイすると、K8sは新しいバージョンを作成し、このバージョンが準備できたら古いバージョンを破棄します。 Prometheus Kubernetes APIを常に監視し、変更を検出すると、サービスの変更(サブ)に基づいて新しいPrometheus構成を作成します。



サービスモニター



Prometheusオペレーターは、 ServiceMonitorと呼ばれるカスタムリソース定義 (CRD)を使用して構成を抽象化します。 以下の例では、ServiceMonitorを使用してnginxで監視する方法を確認できます。 ServiceMonitorは、 matchLabelsセレクターを使用してnginxでunderを選択します。 Prometheusオペレーターは、ラベルセレクターに一致するポッドを探し、Prometheusがメトリックを収集するターゲットを作成します。



apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: nginx spec: selector: matchLabels: app: nginx namespaceSelector: matchNames: - default endpoints: - port: web interval: 30s
      
      





私たちは自分でやってみます



次の手順を既にお持ちの場合、15分以内に完了できます。



  1. Kubernetesクラスターを起動して動作させます。
  2. Helmがインストールされ、動作しています。
  3. helm list





設置



1.名前空間を作成し、prometheus-operator Gitリポジトリのクローンを作成します。



 $ kubectl create ns monitoring $ git clone https://github.com/coreos/prometheus-operator.git $ cd prometheus-operator
      
      





2. prometheus-operatorデプロイメントをインストールします。



 $ helm install --name prometheus-operator \ --set rbacEnable=true --namespace=monitoring helm/prometheus-operator
      
      





3. PrometheusとAlertmanagerの仕様、およびGrafanaの展開をインストールします。



 $ helm install --name prometheus --set serviceMonitorsSelector.app=prometheus \ --set ruleSelector.app=prometheus --namespace=monitoring helm/prometheus $ helm install --name alertmanager --namespace=monitoring helm/alertmanager $ helm install --name grafana --namespace=monitoring helm/grafana
      
      





4. kube -prometheusをインストールして、事前定義されたk8sエクスポーターとserviceMonitorをダウンロードします。



 $ helm install --name kube-prometheus --namespace=monitoring helm/kube-prometheus
      
      





すべてがうまくいった場合は、このコマンドを実行してアプリケーションをリストできます。



 $ kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE alertmanager-alertmanager-0 2/2 Running 0 3m grafana-grafana-3066287131-brj8n 2/2 Running 0 4m kube-prometheus-exporter-kube-state-2696859725-s8m56 2/2 Running 0 3m kube-prometheus-exporter-node-029w0 1/1 Running 0 3m kube-prometheus-exporter-node-n3txz 1/1 Running 0 3m kube-prometheus-exporter-node-q2rk3 1/1 Running 0 3m prometheus-operator-prometheus-operator-514889780-qm3fp 1/1 Running 0 4m prometheus-prometheus-0 2/2 Running 0 3m
      
      





プロメテウス



Prometheusサーバーをコンピューターに転送して、 http://localhost:9090



からパネルにアクセスします。



 $ kubectl port-forward -n monitoring prometheus-prometheus-0 9090
      
      









Prometheusパネルでは、メトリックの照会、事前定義された通知およびPrometheusターゲットの表示ができます。



:ターゲットが使用不可エラーを返す場合は、セキュリティグループとファイアウォールルールを確認してください。 上記のスクリーンショットに示されている目標がない場合は、K8の囲炉裏ラベルを確認してください。 クラスターをデプロイするために使用されるユーティリティがインストールしない場合があります。



注意事項(No. 2) :プロメテウス演算子プロジェクトでは、ヘルムチャートでのK8の標準通知のパッキングに取り組んでいます。 ただし、それらをロードするには、以下の一連のコマンドを実行する必要があります(将来、この必要性はなくなります)。



 $ sed -ie 's/role: prometheus-rulefiles/app: prometheus/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml $ sed -ie 's/prometheus: k8s/prometheus: prometheus/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml $ sed -ie 's/job=\"kube-controller-manager/job=\"kube-prometheus-exporter-kube-controller-manager/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml $ sed -ie 's/job=\"apiserver/job=\"kube-prometheus-exporter-kube-api/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml $ sed -ie 's/job=\"kube-scheduler/job=\"kube-prometheus-exporter-kube-scheduler/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml $ sed -ie 's/job=\"node-exporter/job=\"kube-prometheus-exporter-node/g' contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml $ kubectl apply -n monitoring -f contrib/kube-prometheus/manifests/prometheus/prometheus-k8s-rules.yaml
      
      





グラファナ



デバッグのために、Prometheusには式ブラウザがあります。 美しいダッシュボードを取得するには、Prometheusでリクエストを処理する機能が組み込まれたGrafanaを使用します。



:prometheus-operatorプロジェクトでは、おそらく新しいCRDを使用して、Grafanaの単純なデプロイメントの作成に取り組んでいます。 現時点では、構成するには、次のコマンドを実行する必要があります(将来、この必要性はなくなります)。



 $ sed -ie 's/grafana-dashboards-0/grafana-grafana/g' https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml $ sed -ie 's/prometheus-k8s.monitoring/prometheus-prometheus.monitoring/g' https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml $ kubectl apply -n monitoring -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana/grafana-dashboards.yaml $ kubectl port-forward -n monitoring $(kubectl get pods --selector=app=grafana-grafana -n monitoring --output=jsonpath={.items..metadata.name}) 3000
      
      





Grafanaがデータをロードするまで数秒待ってから、 http://localhost:3000



をブラウザーで開き、素晴らしいグラフィックを学びましょう!





Grafana:Kubernetes用の手頃な価格のダッシュボード





Grafana:Kubernetesの雇用/パフォーマンス計画チャート



アラートマネージャー



Alertmanagerは、Prometheusサーバーなどのクライアントアプリケーションによって送信される通知を提供します。 重複の除去、グループ化、電子メール、PagerDuty、OpsGenieなどの正しい受信者サービスへの送信を提供します。 また、彼は沈黙を担当し通知を抑制します。



上記のコマンドで既にAlertmanagerをインストールしました。サービスポートをコンピューターに転送するために残ります。その後、Webブラウザーでhttp://localhost:9093



を開くことができます。



 $ kubectl port-forward -n monitoring alertmanager-alertmanager-0 9093
      
      





完了



すべてのK8sコンポーネントが監視に追加されます。 プロメテウス演算子がどのように機能するかをよりよく理解するために、YouTubeでこのビデオを見ることもお勧めします。



翻訳者からのPS



著者は、Alertmanagerを使用した通知の設定に関する次の記事でも伝えることを約束します。 彼女の姿はここで期待できます



ブログもご覧ください。






All Articles