クラウドネイティブ システムを構築した後は、システム全体の動作状態を把握できるように、可観測性とアラートを確立する必要があります。 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 をベースにしたクラウドネイティブ アプリケーションの監視とアラームの実際の戦闘について説明し、システムを迅速に構築できるようにします。お役に立てれば幸いです! |