|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
SUSE® Storageを監視するためにPrometheusとGrafanaを設定する
Longhornは、 Prometheusテキスト形式でメトリクスをRESTエンドポイント`http://LONGHORN_MANAGER_IP:PORT/metrics`でネイティブに公開します。
これらのメトリクスをスクレイピングするために、 Prometheus、 Graphite、 Telegrafなどの収集ツールを使用し、収集したデータを Grafanaなどのツールで可視化できます。
利用可能なメトリクスについては、Longhornの監視用メトリクスを参照してください。
高レベルの概要
監視システムは、データ収集とアラート発行に`Prometheus`を使用し、収集したデータの可視化/ダッシュボード作成に`Grafana`を使用します。
-
Prometheusサーバーは、Longhornメトリクスエンドポイントから時系列データをスクレイピングして保存します。このPrometheusは、設定されたルールと収集されたデータに基づいてアラートを生成する責任も負っています。Prometheusサーバーは、アラートをAlertmanagerに送信します。
-
AlertManagerは、アラートの管理を行い、サイレンシング、抑制、集約、メール、オンコール通知システム、チャットプラットフォームなどの方法で通知を送信します。
-
Grafanaは、Prometheusサーバーにクエリを送り、可視化のためのダッシュボードを作成します。
この図は、監視システムの詳細なアーキテクチャを示しています。
上記の図には、言及されていない2つのコンポーネントがあります:
-
Longhornバックエンドサービスは、Longhornマネージャーポッドのセットを指すサービスです。Longhornのメトリクスは、エンドポイント`http://LONGHORN_MANAGER_IP:PORT/metrics`でLonghornマネージャーポッドに公開されています。
-
Prometheusオペレーターは、Kubernetes上でPrometheusを簡単に実行できるようにします。オペレーターは、3つのカスタムリソースを監視します:ServiceMonitor、Prometheus、AlertManager。 これらのカスタムリソースを作成すると、Prometheusオペレーターは、ユーザー指定の設定でPrometheusサーバーとAlertManagerをデプロイおよび管理します。
インストール
このドキュメントは、監視システムのために`default`ネームスペースを使用しています。別のネームスペースにインストールするには、マニフェストの`namespace: <OTHER_NAMESPACE>`フィールドを変更してください。
Prometheus Operatorをインストールします。
Prometheus Operator - クイックスタートの指示に従ってください。
*NOTE:*クラスターのKubernetesバージョンと互換性のあるリリースを選択する必要があるかもしれません。
Longhorn ServiceMonitorをインストールします。
Kubectlを使用してLonghorn ServiceMonitorをインストールします。
Longhorn ManagerのためのServiceMonitorを作成します。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: longhorn-prometheus-servicemonitor
namespace: default
labels:
name: longhorn-prometheus-servicemonitor
spec:
selector:
matchLabels:
app: longhorn-manager
namespaceSelector:
matchNames:
- longhorn-system
endpoints:
- port: manager
Helmを使用してLonghorn ServiceMonitorをインストールします。
-
YAMLファイル`longhorn/chart/values.yaml`を修正します。
metrics: serviceMonitor: # -- Setting that allows the creation of a [Prometheus Operator](https://prometheus-operator.dev/) ServiceMonitor resource for Longhorn Manager components. enabled: true -
Helmを使用してLonghorn ManagerのためのServiceMonitorを作成します。
helm upgrade longhorn longhorn/longhorn --namespace longhorn-system -f values.yaml
Longhorn ServiceMonitorは、 Prometheus Operatorのカスタムリソースである。このセットアップにより、PrometheusサーバーはすべてのLonghorn Managerポッドとそれぞれのエンドポイントを発見できます。
ラベルセレクター`app: longhorn-manager`を使用して、Longhorn Managerポッドのセットを指すlonghorn-backendサービスを選択できます。
Prometheus AlertManagerをインストールして構成します。
-
3つのインスタンスを持つ高可用性のAlertmanagerデプロイメントを作成します。
apiVersion: monitoring.coreos.com/v1 kind: Alertmanager metadata: name: longhorn namespace: default spec: replicas: 3 -
有効な構成が与えられない限り、Alertmanagerインスタンスは起動しません。 詳細については、 Prometheus - 設定を参照してください。
global: resolve_timeout: 5m route: group_by: [alertname] receiver: email_and_slack receivers: - name: email_and_slack email_configs: - to: <the email address to send notifications to> from: <the sender address> smarthost: <the SMTP host through which emails are sent> # SMTP authentication information. auth_username: <the username> auth_identity: <the identity> auth_password: <the password> headers: subject: 'Longhorn-Alert' text: |- {{ range .Alerts }} *Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}` *Description:* {{ .Annotations.description }} *Details:* {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}` {{ end }} {{ end }} slack_configs: - api_url: <the Slack webhook URL> channel: <the channel or user to send notifications to> text: |- {{ range .Alerts }} *Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}` *Description:* {{ .Annotations.description }} *Details:* {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}` {{ end }} {{ end }}上記のAlertmanager構成を`alertmanager.yaml`というファイルに保存し、kubectlを使用してそこからシークレットを作成してください。
Alertmanagerインスタンスは、シークレットリソースの命名が`alertmanager-<ALERTMANAGER_NAME>`の形式に従う必要があります。前のステップでは、Alertmanagerの名前は`longhorn`であるため、シークレット名は`alertmanager-longhorn`である必要があります。
$ kubectl create secret generic alertmanager-longhorn --from-file=alertmanager.yaml -n default -
AlertmanagerのWeb UIを表示するには、Serviceを介して公開してください。これを行う簡単な方法は、NodePortタイプのServiceを使用することである。
apiVersion: v1 kind: Service metadata: name: alertmanager-longhorn namespace: default spec: type: NodePort ports: - name: web nodePort: 30903 port: 9093 protocol: TCP targetPort: web selector: alertmanager: longhorn上記のサービスを作成した後、NodeのIPとポート30903を介してAlertmanagerのWeb UIにアクセスできる。
上記の`NodePort`サービスは、TLS接続を介して通信しないため、迅速な検証のみに使用する。サービスのタイプを`ClusterIP`に変更し、AlertmanagerのWeb UIをTLS接続で公開するためにIngressコントローラーを設定することを推奨します。
Prometheusサーバーをインストールして構成します。
-
アラート条件を定義するためにPrometheusRuleカスタムリソースを作成します。Longhornアラートルールの例でLonghornアラートルールに関するさらなる例を参照してください。
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: prometheus: longhorn role: alert-rules name: prometheus-longhorn-rules namespace: default spec: groups: - name: longhorn.rules rules: - alert: LonghornVolumeUsageCritical annotations: description: Longhorn volume {{$labels.volume}} on {{$labels.node}} is at {{$value}}% used for more than 5 minutes. summary: Longhorn volume capacity is over 90% used. expr: 100 * (longhorn_volume_usage_bytes / longhorn_volume_capacity_bytes) > 90 for: 5m labels: issue: Longhorn volume {{$labels.volume}} usage on {{$labels.node}} is critical. severity: critical詳細については、 Prometheus - アラートルールを参照してください。
-
RBAC認証が有効になっている場合、Prometheus PodsのためにClusterRoleとClusterRoleBindingを作成します。
apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: defaultapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus namespace: default rules: - apiGroups: [""] resources: - nodes - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: [""] resources: - configmaps verbs: ["get"] - nonResourceURLs: ["/metrics"] verbs: ["get"]apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: default -
Prometheusカスタムリソースを作成します。spec内でLonghornサービスモニターとLonghornルールを選択していることに注意してください。
apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: longhorn namespace: default spec: replicas: 2 serviceAccountName: prometheus alerting: alertmanagers: - namespace: default name: alertmanager-longhorn port: web serviceMonitorSelector: matchLabels: name: longhorn-prometheus-servicemonitor ruleSelector: matchLabels: prometheus: longhorn role: alert-rules -
PrometheusサーバーのWeb UIを表示するには、Serviceを介して公開してください。これを行う簡単な方法は、NodePortタイプのServiceを使用することである。
apiVersion: v1 kind: Service metadata: name: prometheus-longhorn namespace: default spec: type: NodePort ports: - name: web nodePort: 30904 port: 9090 protocol: TCP targetPort: web selector: prometheus: longhorn上記のサービスを作成した後、NodeのIPとポート30904を介してPrometheusサーバーのWeb UIにアクセスできます。
この時点で、PrometheusサーバーUIのターゲットおよびルールセクションにすべてのLonghorn ManagerターゲットとLonghornルールが表示されるはずです。
上記のNodePortサービスは、TLS接続を介して通信しないため、迅速な検証のみに使用してください。サービスのタイプを`ClusterIP`に変更し、PrometheusサーバーのWeb UIをTLS接続で公開するためにIngressコントローラーを設定することをお勧めします。
Grafana をセットアップしてください。
-
GrafanaデータソースConfigMapを作成します。
apiVersion: v1 kind: ConfigMap metadata: name: grafana-datasources namespace: default data: prometheus.yaml: |- { "apiVersion": 1, "datasources": [ { "access":"proxy", "editable": true, "name": "prometheus-longhorn", "orgId": 1, "type": "prometheus", "url": "http://prometheus-longhorn.default.svc:9090", "version": 1 } ] }注意: 監視スタックを別のネームスペースにインストールする場合は、フィールド
urlを変更してください。+http://prometheus-longhorn.<NAMESPACE>.svc:9090" -
Grafanaデプロイメントを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: default labels: app: grafana spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: name: grafana labels: app: grafana spec: containers: - name: grafana image: grafana/grafana:7.1.5 ports: - name: grafana containerPort: 3000 resources: limits: memory: "500Mi" cpu: "300m" requests: memory: "500Mi" cpu: "200m" volumeMounts: - mountPath: /var/lib/grafana name: grafana-storage - mountPath: /etc/grafana/provisioning/datasources name: grafana-datasources readOnly: false volumes: - name: grafana-storage emptyDir: {} - name: grafana-datasources configMap: defaultMode: 420 name: grafana-datasources -
Grafanaサービスを作成します。
apiVersion: v1 kind: Service metadata: name: grafana namespace: default spec: selector: app: grafana type: ClusterIP ports: - port: 3000 targetPort: 3000 -
NodePort
32000で Grafana を公開します。kubectl -n default patch svc grafana --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"},{"op":"replace","path":"/spec/ports/0/nodePort","value":32000}]'上記のNodePortサービスは、TLS接続を介して通信しないため、迅速な検証のみに使用してください。サービスのタイプを ClusterIP に変更し、TLS 接続で Grafana を公開するために Ingress コントローラーを設定することをお勧めします。
-
ポート
32000で任意のノード IP を使用して Grafana ダッシュボードにアクセスします。# Default Credential User: admin Pass: admin -
Longhornダッシュボードを設定します。
Grafana内に入ったら、事前構築された Longhorn example dashboardをインポートしてください。
Grafana ダッシュボードをインポートする方法については、 Grafana Lab - エクスポートとインポート を参照してください。
成功したセットアップでは、次のダッシュボードが表示されるはずです:
