Chuyển đến nội dung chính

第 25 課:監控、審核日誌記錄、備份/復原和故障排除

Prometheus + Grafana監控、稽核設備配置、稽核日誌分析、Raft備份/復原、常見問題排查、升級策略。

<定義> <線性漸變 id="bg-5372" x1="0%" y1="0%" x2="100%" y2="100%">

<矩形寬度=“1200”高度=“340”rx=“12”填滿=“url(#bg-5372)”/>

<圓cx =“750”cy =“80”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“750”cy =“108”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“750”cy =“136”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“750”cy =“164”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“778”cy =“108”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“806”cy =“80”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“806”cy =“108”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“806”cy =“136”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“806”cy =“164”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“834”cy =“80”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“834”cy =“108”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“834”cy =“164”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“862”cy =“108”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“862”cy =“164”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“890”cy =“80”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“890”cy =“108”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“890”cy =“136”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <圓cx =“890”cy =“164”r =“1.5”填入=“#f87171”不透明度=“0.15”/> <多邊形點=「961.507041555162,105.5 961.507041555162,146.5 926,167 890.492958444838,146.5 890.492958444838,105.50000000000001 926,85" 填充 = "無" 筆畫 = "#f87171" 筆畫寬度 = "1" 不透明度 = "0.12"/>

<矩形x =“60”y =“50”寬度=“4”高度=“60”rx =“2”填滿=“#f87171”/> <矩形x =“80”y =“50”寬度=“121”高度=“28”rx =“14”填滿=“#f87171”不透明度=“0.15”/> 🔒 DevSecOps — 第 25 堂課

第 25 課:監控、審核日誌記錄 備份/復原與故障排除

HashiCorp Vault 從基礎到進階

第 7 部分:生產、企業和營運

xdev.asia

1.使用Prometheus + Grafana進行監控

啟用遙測

#Vault.hcl
遙測{
  prometheus_retention_time = "30s"
  禁用主機名稱 = true
  
  # StatsD(可選 nếu dùng StatsD 導出器)
  # statsd_address = "statsd:8125"
}

偵聽器“tcp”{
  地址 =“0.0.0.0:8200”
  tls_disable = false
  # ...

  遙測{
    unauthenticated_metrics_access = true # Hoặc false + dùng token
  }
}

普羅米修斯抓取配置

# prometheus.yml
scrap_configs:
  - 工作名稱:'金庫'
    指標路徑:'/v1/sys/指標'
    參數:
      格式:['普羅米修斯']
    方案:https
    tls_配置:
      ca_檔:/etc/prometheus/vault-ca.pem
    # Nếu unauthenticated_metrics_access = false:
    # bearer_token_file: /etc/prometheus/vault-token
    靜態配置:
      - 目標:
          - 'vault-node-1:8200'
          - 'vault-node-2:8200'
          - 'vault-node-3:8200'
        標籤:
          集群:“生產”

要監控的關鍵指標

<表> <標題> 指標描述警報閾值 <正文> vault.core.handle_request.count請求總數趨勢分析 vault.core.handle_request.duration請求延遲P99 > 500ms vault.token.count活躍代幣突然飆升 vault.expire.num_leases有效租約> 256000 vault.runtime.alloc_bytes記憶體分配> 80% RAM vault.runtime.gc_pause_nsGC暫停> 2s vault.raft.leader.lastContact自領導者聯繫以來的時間> 200ms vault.raft.commitTimeRaft 提交時間> 25ms vault.seal.unseal解封事件意外計數 vault.audit.log_response_failure審核日誌失敗Any > 0

Grafana 儀表板

{
  "dashboard_id": "保管庫概述",
  “面板”:[
    {
      "title": "請求率",
      “查詢”:“速率(vault_core_handle_request_count [5m])”
    },
    {
      "title": "請求延遲 P99",
      “查詢”:“histogram_quantile(0.99,速率(vault_core_handle_request_duration_bucket [5m]))”
    },
    {
      "title": "有效租賃",
      “查詢”:“vault_expire_num_leases”
    },
    {
      "title": "Raft Leader 最後一次聯絡",
      “查詢”:“vault_raft_leader_lastContact”
    },
    {
      "title": "記憶體使用量",
      “查詢”:“vault_runtime_alloc_bytes / 1024 / 1024”
    }
  ]
}

提醒規則

#Vault-alerts.yml
團體:
  - 名稱:金庫
    規則:
      - 警報:VaultSealed
        表達式:vault_core_unsealed == 0
        用於:1m
        標籤:
          嚴重程度:嚴重
        註:
          摘要:“Vault節點已被密封”

      - 警報:VaultHighLatency
        expr: histogram_quantile(0.99, 速率(vault_core_handle_request_duration_bucket[5m])) > 0.5
        用於:5m
        標籤:
          嚴重性:警告

      - 警報:VaultLeadershipLost
        表達式:vault_raft_leader_lastContact > 200
        持續時間:30秒
        標籤:
          嚴重程度:嚴重

      - 警報:VaultAuditFailure
        expr: 增加(vault_audit_log_response_failure[5m]) > 0
        標籤:
          嚴重程度:嚴重
          
      - 警報:VaultTooManyLeases
        expr:Vault_expire_num_leases > 200000
        適合:10m
        標籤:
          嚴重性:警告

2.稽核日誌

設定審核設備

# 檔案審核器
vault audit enable file file_path=/var/log/vault/audit.log

# Syslog審計設備
vault audit enable syslog tag="vault" facility="LOCAL0"

# 套接字審計設備(cho 日誌聚合器)
vault audit enable socket \
  地址=“logstash.company.com:9000”\
  套接字類型=“TCP”# Luôn 啟用 2 個審核設備!
# Vault sẽ BLOCK tất cả requests nếu không có 稽核設備 nào hoạt động

# 列出審計設備
vault audit list -detailed

審核日誌格式

{
  "時間": "2025-01-15T10:30:00.000Z",
  “類型”:“請求”,
  「授權」:{
    "client_token": "hmac-sha256:abc123...",
    "accessor": "hmac-sha256:def456...",
    "display_name": "approle-cicd",
    “策略”:[“cicd-deploy”,“預設”],
    「元資料」:{
      "role_name": "cicd-管道"
    },
    "entity_id": "實體-uuid-此處",
    “token_type”:“服務”
  },
  「請求」:{
    "id": "請求 uuid",
    “操作”:“讀取”,
    "mount_type": "kv",
    “路徑”:“秘密/數據/生產/資料庫”,
    “遠端位址”:“10.0.1.50”,
    “遠端連接埠”:45678
  }
}

日誌分析查詢

# Tìm 請求失敗
貓 /var/log/vault/audit.log | \
  jq -r 'select(.type == "response" and .response.data == null) |
  [.time、.request.path、.auth.display_name、.error] | @tsv'

# Tìm 政策否認
貓 /var/log/vault/audit.log | \
  jq -r 'select(.error != null and (.error | contains("權限被拒絕"))) |
  [.時間、.請求路徑、.請求操作、.auth.顯示名稱] | @tsv'

# 訪問次數最多的 10 個路徑
貓 /var/log/vault/audit.log | \
  jq -r 'select(.type == "請求") | .request.path'| \
  排序| uniq-c|排序-rn |頭-10

# 按身分要求
貓 /var/log/vault/audit.log | \
  jq -r 'select(.type == "請求") | .auth.display_name' | \
  排序| uniq-c|排序-rn

3.備份與復原

Raft 快照備份

#!/bin/bash
#vault-backup.sh

VAULT_ADDR =「https://vault.company.com:8200"
BACKUP_DIR="/備份/保管庫"
RETENTION_DAYS=30
日期=$(日期+%Y%m%d_%H%M%S)

# 快照
vault operator raft snapshot save \
  “${BACKUP_DIR}/vault-snapshot-${DATE}.snap”

# 驗證快照
vault operator raft snapshot inspect \
  “${BACKUP_DIR}/vault-snapshot-${DATE}.snap”

# 上傳到S3
aws s3 cp "${BACKUP_DIR}/vault-snapshot-${DATE}.snap" \
  “s3://company-backup/vault/vault-snapshot-${DATE}.snap”\
  --sse aws:kms

# 清理舊備份
尋找“${BACKUP_DIR}”-名稱“*.snap”-mtime +${RETENTION_DAYS}-刪除
# Cron 作業 — 備份 mỗi giờ
0 * * * * /opt/vault/scripts/vault-backup.sh >> /var/log/vault-backup.log 2>&1

恢復

# 恢復快照 — CHÚ Ý: 覆蓋數據
vault operator raft snapshot restore \
  /備份/vault/vault-snapshot-20250115_100000.snap

# 強制恢復 (khi cluster đã thay đổi)
vault operator raft snapshot restore -force \
  /備份/vault/vault-snapshot-20250115_100000.snap

4.故障排除

常見問題

<表> <標題> 問題原因解 <正文> 重啟後保管庫密封無法自動解封KMS/HSM 設定密封 503 服務無法使用節點處於備用/DR 輔助將請求路由到活動節點 租約數量不斷增加客戶端不撤銷租約整潔的租約,檢查 TTL 令牌儲存太大孤兒令牌不會撤銷令牌整潔,減少TTL Raft Leader 抖動網路不穩定心跳超時增加 審核設備阻塞磁碟已滿/日誌目標已關閉釋放磁碟,修復日誌目標 記憶體使用率高租約/令牌過多整理和調整 TTL

偵錯指令

# 伺服器狀態
vault status
vault status -format=json

# Raft集群信息
vault operator raft list-peers
vault operator raft autopilot state

# 領導者訊息
vault operator step-down  # Force leader election

# 關鍵狀態
vault operator key-status

# 租賃管理
vault lease list -prefix "database/"
vault lease revoke -prefix "database/creds/app-role/"

# 令牌整潔
vault write sys/tidy/tidy-token-store \
  安全緩衝區=“72小時”

# 租約整潔
vault write sys/leases/tidy \
  tidy_type="不可撤銷"

# 調試包(支援)
vault debug -duration=2m -targets=metrics,server-status,replication-status

# 讀取內部計數器
vault read sys/internal/counters/tokens
vault read sys/internal/counters/requests

升級策略

# 1. 備份 trước khi 升級
vault operator raft snapshot save /backup/pre-upgrade.snap

# 2.閱讀發行說明+升級指南

# 3. 升級備用節點trước(滾動升級)
# 節點3(備用)
systemctl 停止金庫
# 替換二進位文件
cpVault-新/usr/bin/vault
systemctl 啟動保管庫

# 驗證節點重新加入叢集
vault operator raft list-peers

# 4. 重複 cho 節點 2

#5. 下台領導,升級cuối cùng
vault operator step-down
# 等待新的領導人選舉
systemctl 停止金庫
cpVault-新/usr/bin/vault
systemctl 啟動保管庫

# 6. 驗證
vault status
vault operator raft list-peers
vault operator raft autopilot state

5。摘要

  • 監控 - 需要 Prometheus 指標 + Grafana 儀表板 + 警報

  • 審核 — 始終啟用 ≥ 2 個審核設備,定期分析日誌

  • 備份 — 自動 Raft 快照、異地儲存、定期測試復原

  • 故障排除 - 了解偵錯指令、常見問題以及如何處理它們

  • 升級 - HA叢集滾動升級,總是先備份

至此,您已完成從基礎到高級的整個 HashiCorp Vault 系列。從設定、秘密引擎、身份驗證方法、策略、代理商、Kubernetes、CI/CD 到生產 HA、企業、監控和操作。