クラウドネイティブアプリケーションの監視とアラートの6つのステップ

クラウドネイティブアプリケーションの監視とアラートの6つのステップ

クラウドネイティブ システムを構築した後は、システム全体の動作状態を把握できるように、可観測性とアラートを確立する必要があります。 Prometheus に基づくクラウド ネイティブの監視とアラートは業界で一般的に使用されているソリューションであり、すべてのクラウド ネイティブの参加者はそれを理解する必要があります。

この記事では、主に Springboot アプリケーションを例に、クラウド ネイティブ アプリケーションの監視とアラームの実際の操作について説明しており、理論的な知識についてはあまり説明していません。友人が実際の操作を整理した後、理論的な知識を補足することで、システム全体を理解しやすくなります。

1. 監視および警報技術の選択

Kubernetes クラスターは非常に複雑で、コンテナの基本リソース インジケーター、k8s クラスター ノード インジケーター、クラスター内のビジネス アプリケーション インジケーターなどが含まれます。監視する必要がある指標が多数あるため、従来の監視ソリューションである Zabbix はクラウドネイティブ監視をあまりサポートしていません。

そのため、クラウドネイティブに適した監視およびアラームソリューションである Prometheus を使用する必要があります。 Prometheus とクラウド ネイティブは切り離せない関係にあり、Prometheus は現在、クラウド ネイティブ エコシステムにおける監視の事実上の標準となっています。 Prometheus をベースにした監視およびアラーム ソリューションを段階的に構築してみましょう。

Prometheus の基本原理は、監視対象システムからさまざまな指標を積極的に取得し、それらを要約して独自の時系列データベースに保存し、最終的にチャートで表示したり、アラーム ルールに従ってアラームをトリガーしたりすることです。監視対象システムは、インジケーターをキャプチャするために、Prometheus へのインターフェースを積極的に公開する必要があります。フローチャートは次のとおりです。

2. 事前準備

この記事の前提は、docker と kubernetes をインストールし、K8S クラスターに springboot アプリケーションをデプロイする必要があることです。

K8S クラスターに 4 つのノード、つまり k8s-master (10.20.1.21)、k8s-worker-1 (10.20.1.22)、k8s-worker-2 (10.20.1.23)、k8s-worker-3 (10.20.1.24) があるとします。

3. Prometheusをインストールする

3.1. k8s-masterノードに名前空間を作成する

kubectl create ns monitoring

3.2. configmapファイルを準備する

configmap ファイル prometheus-config.yaml を準備します。現時点では、Prometheus インジケーター自体のクロール タスクのみが yaml ファイルで構成されます。以下は引き続きこの yaml ファイルを補足します。

 apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: monitoring data: prometheus.yml: | global: scrape_interval: 15s scrape_timeout: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']

3.3.構成マップを作成する

kubectl apply -f prometheus-config.yaml

3.4. Prometheusのデプロイメントファイルを準備する

Prometheusデプロイメントファイルprometheus-deploy.yamlを準備する

apiVersion: apps/v1 kind: Deployment metadata: name: prometheus namespace: monitoring labels: app: prometheus spec: selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: serviceAccountName: prometheus containers: - image: prom/prometheus:v2.31.1 name: prometheus securityContext: runAsUser: 0 args: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" # 指定tsdb数据路径- "--storage.tsdb.retention.time=24h" - "--web.enable-admin-api" # 控制对admin HTTP API的访问,其中包括删除时间序列等功能- "--web.enable-lifecycle" # 支持热更新,直接执行localhost:9090/-/reload立即生效ports: - containerPort: 9090 name: http volumeMounts: - mountPath: "/etc/prometheus" name: config-volume - mountPath: "/prometheus" name: data resources: requests: cpu: 200m memory: 1024Mi limits: cpu: 200m memory: 1024Mi - image: jimmidyson/configmap-reload:v0.4.0 #prometheus配置动态加载name: prometheus-reload securityContext: runAsUser: 0 args: - "--volume-dir=/etc/config" - "--webhook-url=http://localhost:9090/-/reload" volumeMounts: - mountPath: "/etc/config" name: config-volume resources: requests: cpu: 100m memory: 50Mi limits: cpu: 100m memory: 50Mi volumes: - name: data persistentVolumeClaim: claimName: prometheus-data - configMap: name: prometheus-config name: config-volume

3.5. Prometheus用のストレージファイルを準備する

Prometheusストレージファイルprometheus-storage.yamlを準備する

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolume metadata: name: prometheus-local labels: app: prometheus spec: accessModes: - ReadWriteOnce capacity: storage: 20Gi storageClassName: local-storage local: path: /data/k8s/prometheus #确保该节点上存在此目录persistentVolumeReclaimPolicy: Retain nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-worker-2 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: prometheus-data namespace: monitoring spec: selector: matchLabels: app: prometheus accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: local-storage

ここでは、ストレージ リソースとして k8s-worker-2 ノードを使用します。読者はこれを独自のノード名に変更し、対応するノードの下にディレクトリを作成する必要があります: /data/k8s/prometheus。最後に、時系列データベースのデータは、次の図に示すように、このディレクトリに保存されます。

上記の yaml は、pv、pvc、および storageclass ストレージに関連する知識を使用します。後ほどそれを説明する記事を書きます。簡単に紹介すると、pv、pvc、storageclass は主に、ポッドのストレージ リソースを自動的に作成することに関連するコンポーネントです。

3.6.ストレージリソースを作成する

kubectl apply -f prometheus-storage.yaml

3.7.ユーザー、ロール、権限関連のファイルを準備する

ユーザー、ロール、権限に関連するファイル prometheus-rbac.yaml を準備します。

 apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: - "" resources: - nodes - services - endpoints - pods - nodes/proxy verbs: - get - list - watch - apiGroups: - "extensions" resources: - ingresses verbs: - get - list - watch - apiGroups: - "" resources: - configmaps - nodes/metrics 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: monitoring

3.8. RBACリソースを作成する

kubectl apply -f prometheus-rbac.yaml

3.9.展開リソースを作成する

kubectl apply -f prometheus-deploy.yaml

3.10.サービスリソースオブジェクトファイルを準備する

サービス リソース オブジェクト ファイル prometheus-svc.yaml を準備します。 NortPort を使用して Prometheus への外部アクセスを提供します。

 apiVersion: v1 kind: Service metadata: name: prometheus namespace: monitoring labels: app: prometheus spec: selector: app: prometheus type: NodePort ports: - name: web port: 9090 targetPort: http

3.11.サービス オブジェクトを作成します。

 kubectl apply -f prometheus-svc.yaml

3.12.プロメテウスにアクセス

この時点で、kubectl get svc -n monitoring を通じて公開されたポート番号を取得し、K8S クラスター内の任意のノード + ポート番号を通じて Prometheus にアクセスできるようになります。例えば、http://10.20.1.21:32459/ にアクセスすると、次のインターフェースが表示されます。ターゲットを通じて、上記の prometheus-config.yaml ファイルで構成されたクロールされたオブジェクトを確認できます。

Prometheus がインストールされたので、Grafana のインストールを続行します。

4. Grafanaをインストールする

プロメテウスのチャート機能は比較的弱いです。通常、Prometheus のデータを表示するには Grafana が使用されます。 Grafanaのインストールを始めましょう。

4.1. Grafanaデプロイメントファイルを準備する

オールインワン ファイルである Grafana デプロイメント ファイル grafana-deploy.yaml を準備します。このファイル内のデプロイメント、サービス、PV、および PVC のすべてのオーケストレーションをアンインストールします。

 apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: monitoring spec: selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: volumes: - name: storage persistentVolumeClaim: claimName: grafana-data containers: - name: grafana image: grafana/grafana:8.3.3 imagePullPolicy: IfNotPresent securityContext: runAsUser: 0 ports: - containerPort: 3000 name: grafana env: - name: GF_SECURITY_ADMIN_USER value: admin - name: GF_SECURITY_ADMIN_PASSWORD value: admin readinessProbe: failureThreshold: 10 httpGet: path: /api/health port: 3000 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 30 livenessProbe: failureThreshold: 3 httpGet: path: /api/health port: 3000 scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 resources: limits: cpu: 400m memory: 1024Mi requests: cpu: 200m memory: 512Mi volumeMounts: - mountPath: /var/lib/grafana name: storage --- apiVersion: v1 kind: Service metadata: name: grafana namespace: monitoring spec: type: NodePort ports: - port: 3000 selector: app: grafana --- apiVersion: v1 kind: PersistentVolume metadata: name: grafana-local labels: app: grafana spec: accessModes: - ReadWriteOnce capacity: storage: 1Gi storageClassName: local-storage local: path: /data/k8s/grafana #保证节点上创建好该目录persistentVolumeReclaimPolicy: Retain nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-worker-2 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-data namespace: monitoring spec: selector: matchLabels: app: grafana accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage

PV、PVC、StorageClass の知識は上記でも引き続き使用されます。ノード アフィニティは k8s-worker-2 ノードを選択し、ノード上にディレクトリ /data/k8s/grafana を作成する必要があります。

4.2. Grafanaリソースをデプロイする

kubectl apply -f grafana-deploy.yaml

4.3. Grafana にアクセスする

対応するサービス ポート マッピングを表示します。

リンク http://10.20.1.21:31881/ から Grafana にアクセスし、構成ファイル内のユーザー名とパスワードを使用して Grafana にアクセスし、Prometheus データ ソースをインポートします。

5. データキャプチャを構成する

5.1.クロールノードデータを構成する

データをクロールする前に、ノード上で node-exporter を構成して、prometheus が node-exporter によって公開されるインターフェースを通じてデータをクロールできるようにする必要があります。

5.1.1. node-exporterのデプロイメントファイルを準備する

node-exporter デプロイメント ファイル node-exporter-daemonset.yaml を準備します。

 apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: kube-system labels: app: node-exporter spec: selector: matchLabels: app: node-exporter template: metadata: labels: app: node-exporter spec: hostPID: true hostIPC: true hostNetwork: true nodeSelector: kubernetes.io/os: linux containers: - name: node-exporter image: prom/node-exporter:v1.3.1 args: - --web.listen-address=$(HOSTIP):9100 - --path.procfs=/host/proc - --path.sysfs=/host/sys - --path.rootfs=/host/root - --no-collector.hwmon # 禁用不需要的一些采集器- --no-collector.nfs - --no-collector.nfsd - --no-collector.nvme - --no-collector.dmi - --no-collector.arp - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/containerd/.+|/var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/) - --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$ ports: - containerPort: 9100 env: - name: HOSTIP valueFrom: fieldRef: fieldPath: status.hostIP resources: requests: cpu: 150m memory: 200Mi limits: cpu: 300m memory: 400Mi securityContext: runAsNonRoot: true runAsUser: 65534 volumeMounts: - name: proc mountPath: /host/proc - name: sys mountPath: /host/sys - name: root mountPath: /host/root mountPropagation: HostToContainer readOnly: true tolerations: # 添加容忍- operator: "Exists" volumes: - name: proc hostPath: path: /proc - name: dev hostPath: path: /dev - name: sys hostPath: path: /sys - name: root hostPath: path: /

5.1.2.ノードエクスポーターをデプロイする

kubectl apply -f node-exporter-daemonset.yaml

5.1.3、クロールデータへのPrometheusアクセス

次のように、前の prometheus-config.yaml ファイルに job-name を追加します。

 - job_name: kubernetes-nodes kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:9100' target_label: __address__ action: replace - action: labelmap regex: __meta_kubernetes_node_label_(.+)

完全な prometheus-config.yaml は記事の最後にあります。

prometheus-config.yaml ファイルが変更されると、次の図に示すように、しばらくするとページにさらにいくつかのターゲットが表示されます。これらは Prometheus によって監視されるオブジェクトです:

5.2. Springbootアクチュエータデータキャプチャを構成する

5.2.1、Springbootアプリケーションの設定

  • Springbootアプリケーションがpomを追加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
  • Springboot アプリケーション構成プロパティ ファイル:
 management.endpoint.health.probes.enabled=true management.health.probes.enabled=true management.endpoint.health.enabled=true management.endpoint.health.show-details=always management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env,beans management.endpoint.shutdown.enabled=true management.server.port=9090
  • インジケーターリンクを表示

構成が完了したら、イメージを再作成して K8S クラスターにデプロイします。ここではそれを説明しません。アプリケーションの /actuator/prometheus リンクにアクセスすると、次の結果が得られ、システムのインジケーター情報が公開されます。

5.2.2、クロールデータへのPrometheusアクセス

次のように、構成ファイル prometheus-config.yaml の変更を続けます。

 - job_name: 'spring-actuator-many' metrics_path: '/actuator/prometheus' scrape_interval: 5s kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace] separator: ; regex: 'test1' target_label: namespace action: keep - source_labels: [__address__] regex: '(.*):9090' target_label: __address__ action: keep - action: labelmap regex: __meta_kubernetes_pod_label_(.+)

設定ファイルは、ポート 9090 と名前空間 test1 を持つポッド リソースが監視対象として選択されていることを大まかに意味します。詳細な構文については、Prometheus の公式 Web サイトを参照してください。

しばらくすると、springboot アプリケーションの追加の監視ターゲットがあることがわかります。

6. 監視チャートを構成する

インジケータ データが取得できたので、次のステップはチャートを構成する方法です。 Grafana はさまざまなチャートを提供しており、公式 Web サイトで選択できます。次のセクションでは、ノードを監視するためのチャートと、Springboot アプリケーションを監視するためのチャートの構成を続けます。

チャートを構成するには、json ファイル、入力チャート ID、入力 json コンテンツの 3 つの方法があります。設定インターフェースは次のとおりです。

6.1.ノード監視チャートを構成する

上記のインターフェースでチャート ID を入力する方法を選択し、チャート ID 8919 を入力すると、次のインターフェースが表示されます。

6.2. Springbootアプリケーションチャートを構成する

上記のインターフェースで、json コンテンツの入力方法を選択し、このリンク https://img.mangod.top/blog/13-6-jvm-micrometer.json の下に json コンテンツを入力すると、次のグラフが表示されます。

これまでに、k8s-node の監視と springboot アプリケーションの監視が完了しました。さらなる監視が必要な場合は、読者が自ら情報を参照する必要があります。

7. アラートマネージャーをインストールする

監視が完了したら、アラーム コンポーネント alertmanager をインストールします。 K8S クラスター内の任意のノードに docker を使用してインストールすることを選択できます。

7.1.アラートマネージャをインストールする

7.1.1. Dockerイメージをプルする

docker pull prom/alertmanager:v0.25.0

7.1.2.アラーム設定ファイルを作成する

アラーム設定ファイル alertmanager.yml を作成する前に、alertmanager がインストールされているノードに /data/prometheus/alertmanager ディレクトリを作成し、そのディレクトリに次の内容のファイル alertmanager.yml を作成する必要があります。

 route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'mail_163' global: smtp_smarthost: 'smtp.qq.com:465' smtp_from: '[email protected]' smtp_auth_username: '[email protected]' # 此处是发送邮件的授权码,不是密码smtp_auth_password: '此处是授权码,比如sdfasdfsdffsfa' smtp_require_tls: false receivers: - name: 'mail_163' email_configs: - to: '[email protected]' send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']

7.1.3.インストールと起動:

 docker run --name alertmanager -d -p 9093:9093 -v /data/prometheus/alertmanager:/etc/alertmanager prom/alertmanager:v0.25.0

7.1.4 アラートマネージャへのアクセス

インストールが完了したら、次のリンクにアクセスしてください: http://10.20.1.21:9093/#/alerts。インターフェースは次のとおりです。

7.2.プロメテウスとの関連

prometheus を alertmanager に関連付けるには、prometheus-configmap.yaml ファイルに次の構成を追加し、構成内のアドレスを独自の prometheus アドレスに変更します。

7.3.アラームのトリガールールを設定する

7.3.1.設定ディレクトリを追加

アラームをトリガーするルールを追加するには、prometheus-configmap.yaml ファイルに次の構成を追加します。

ここでのファイル ディレクトリ /prometheus/ は、prometheus が配置されているストレージ ディレクトリであることに注意してください。これを k8s-worker-2 の下にインストールし、以下に示すように、prometheus のストレージ ディレクトリの下に /rules フォルダーを作成しました。

この時点で、prometheus-config.yaml は完全に構成されています。最後に、完全な prometheus-config.yaml を添付します。

 apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: monitoring data: prometheus.yml: | global: scrape_interval: 15s scrape_timeout: 15s alerting: alertmanagers: - static_configs: - targets: - 10.20.1.21:9093 rule_files: - /prometheus/rules/*.rules scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: "cadvisor" kubernetes_sd_configs: - role: node scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) replacement: $1 - replacement: /metrics/cadvisor # <nodeip>/metrics -> <nodeip>/metrics/cadvisor target_label: __metrics_path__ - job_name: kubernetes-nodes kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:9100' target_label: __address__ action: replace - action: labelmap regex: __meta_kubernetes_node_label_(.+) - job_name: 'spring-actuator-many' metrics_path: '/actuator/prometheus' scrape_interval: 5s kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace] separator: ; regex: 'test1' target_label: namespace action: keep - source_labels: [__address__] regex: '(.*):9090' target_label: __address__ action: keep - action: labelmap regex: __meta_kubernetes_pod_label_(.+)

7.3.2.アラームのトリガールールを設定する

アラームルールをトリガーするためのディレクトリが決定されました。次のステップは、具体的なルールを記述することです。ディレクトリ内にアラームをトリガーするための 2 つのルール ファイルを作成します。上図に示すように、ファイルにはノード アラームをトリガーするためのルールと、Springboot アプリケーションをトリガーするためのルールが含まれています。具体的な内容は以下のとおりです。

  • ノード ノード アラーム ルール-ホスト統計-アラート.yaml:
 groups: - name: hostStatsAlert rules: - alert: hostCpuUsageAlert expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.85 for: 1m labels: severity: page annotations: summary: "Instance {{ $labels.instance }} CPU usgae high" description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})" - alert: hostMemUsageAlert expr: (node_memory_MemTotal - node_memory_MemAvailable)/node_memory_MemTotal > 0.85 for: 1m labels: severity: page annotations: summary: "Instance {{ $labels.instance }} MEM usgae high" description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"
  • springboot アプリケーション警告 rules-jvm-metrics-rules.yaml:
 groups: - name: jvm-metrics-rules rules: # 在5分钟里,GC花费时间超过10% - alert: GcTimeTooMuch expr: increase(jvm_gc_collection_seconds_sum[5m]) > 30 for: 5m labels: severity: red annotations: summary: "{{ $labels.app }} GC时间占比超过10%" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} GC时间占比超过10%,当前值({{ $value }}%)" # GC次数太多- alert: GcCountTooMuch expr: increase(jvm_gc_collection_seconds_count[1m]) > 30 for: 1m labels: severity: red annotations: summary: "{{ $labels.app }} 1分钟GC次数>30次" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} 1分钟GC次数>30次,当前值({{ $value }})" # FGC次数太多- alert: FgcCountTooMuch expr: increase(jvm_gc_collection_seconds_count{gc="ConcurrentMarkSweep"}[1h]) > 3 for: 1m labels: severity: red annotations: summary: "{{ $labels.app }} 1小时的FGC次数>3次" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} 1小时的FGC次数>3次,当前值({{ $value }})" # 非堆内存使用超过80% - alert: NonheapUsageTooMuch expr: jvm_memory_bytes_used{job="spring-actuator-many", area="nonheap"} / jvm_memory_bytes_max * 100 > 80 for: 1m labels: severity: red annotations: summary: "{{ $labels.app }} 非堆内存使用>80%" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} 非堆内存使用率>80%,当前值({{ $value }}%)" # 内存使用预警- alert: HeighMemUsage expr: process_resident_memory_bytes{job="spring-actuator-many"} / os_total_physical_memory_bytes * 100 > 15 for: 1m labels: severity: red annotations: summary: "{{ $labels.app }} rss内存使用率大于85%" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} rss内存使用率大于85%,当前值({{ $value }}%)" # JVM高内存使用预警- alert: JavaHeighMemUsage expr: sum(jvm_memory_used_bytes{area="heap",job="spring-actuator-many"}) by(app,instance) / sum(jvm_memory_max_bytes{area="heap",job="spring-actuator-many"}) by(app,instance) * 100 > 85 for: 1m labels: severity: red annotations: summary: "{{ $labels.app }} rss内存使用率大于85%" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} rss内存使用率大于85%,当前值({{ $value }}%)" # CPU使用预警- alert: JavaHeighCpuUsage expr: system_cpu_usage{job="spring-actuator-many"} * 100 > 85 for: 1m labels: severity: red annotations: summary: "{{ $labels.app }} rss CPU使用率大于85%" message: "ns:{{ $labels.namespace }} pod:{{ $labels.pod }} rss内存使用率大于85%,当前值({{ $value }}%)"
  • アラート ファイルが準備されたら、まず alertmanager を再起動し、次に prometheus を再起動します。

 kubectl delete -f prometheus-deploy.yamlkubectl apply -f prometheus-deploy.yaml
  • インターフェースを表示

この時点で alertmanager のステータスを確認すると、次のインターフェイスが表示されます。

この時点で、プロメテウスのルールを確認すると、次のインターフェースが表示されます。

7.3.3.注記

アラート マネージャーのアラーム設定を変更した場合、変更を有効にするにはアラート マネージャーを再起動する必要があります。

alertmanager.yml の smtp_auth_password は、電子メールのパスワードではなく、電子メールで送信された認証コードで構成されます。メールボックス認証コードの構成は下図のようになります。下の図は、QQ メールボックスを例にしています。

この時点で、Prometheus と Grafana に基づく監視とアラートがインストールされています。

8. テストアラーム

インストールが完了したら、アラームの効果をテストするだけです。テスト方法は2つあります。

方法 1: アラーム ルールの値を下げると、次の電子メールが届きます。

方法 2: コマンド cat /dev/zero>/dev/null を使用して、ノードまたはコンテナの CPU を増やします。次のメールが届きます:

9. まとめ

この記事では、主に Prometheus + Grafana をベースにしたクラウドネイティブ アプリケーションの監視とアラームの実際の戦闘について説明し、システムを迅速に構築できるようにします。お役に立てれば幸いです!

<<:  OpenTelemetry は理解しやすいです。

>>:  Kubernetes (K8S) 管理、グラフィカル インターフェース、Web UI

推薦する

検索エンジンがあなたのウェブサイトを好まないのはなぜでしょうか?

検索エンジンがコンテンツを効果的に閲覧できない場合、ウェブサイトにどれだけ努力を注いでも無駄になって...

違法薬物販売サイトの60%は禁止にもかかわらず運営されており、摘発された製品は依然として販売されている

今月8日、国家食品医薬品局は虚偽の医薬品情報を掲載した違法ウェブサイト10件を摘発した。食品医薬品局...

ソーシャルマーケティングの成功と失敗は時間によって決まる

はじめに:世界的なブランドがソーシャル ネットワークに参入する時期は大きな影響はありませんが、あまり...

onetechcloud: すべての VPS が 20% オフ、米国双方向 cn2 gia vps、米国 cn2 高防御、香港 CN2、香港 CMI 高帯域幅

onetechcloud は現在、全製品が 20% オフになるプロモーションを実施しています。選択で...

エッジコンピューティングと5Gがパンデミック後の経済回復を推進

[[429757]]エッジコンピューティングと5GはCOVID-19後の経済成長を牽引するでしょうか...

Bilibili、iQiyi 広告およびコンテンツ IP

11月17日、ビリビリ(以下、「ビリビリ」)とiQiyiは、2019年9月30日までの第3四半期の財...

Xiaomiマーケティングがアイスシティ広告祭に登場、スマートエコシステムに新たな考え方をもたらす

月収10万元の起業の夢を実現するミニプログラム起業支援プラン第25回中国国際広告祭が「氷の都」ハルビ...

Weiboマーケティングの特徴を理解し、Weiboマーケティングをうまく活用しましょう

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeiboマーケティング...

天一雲、あなたの妹よ!

私はMumaoから1GメモリのTianyi Cloudを購入しました。年間払いの場合、プロモーション...

認定資格やリモートワークがクラ​​ウドコンピューティングの給与に与える影響

COVID-19 パンデミックにより、クラウド コンピューティング関連の職種の需要が急増しており、エ...

最大のヘルスケア業界イベントが開催、ファーウェイクラウドが華々しく登場

医療と健康の分野で最も権威のあるトップサミットである中国健康産業(国際)生態会議(略称:CIP会議)...

石玉珠の自伝:1元を使って38元の効果を達成する方法

メラトニンの広告料は年間3億元で、放送に基づく仲介機関の最終査定額は38億元だった。このような大きな...

ユーザーエクスペリエンスと製品デザインの役割についての簡単な分析

最近は写真付きでお話する方が好きなので、まずは写真を載せておきます。これが、製品の構想から誕生までの...

YY音楽業界チェーン調査:隠れたリーダーが人気をコントロール

[はじめに] 多くのオンラインゲームユーザーは、特典を楽しむためにお金を払う習慣をすでに身に付けてい...