<矩形寬度=“1200”高度=“340”rx=“12”填滿=“url(#bg-5372)”/>
<矩形x =“60”y =“50”寬度=“4”高度=“60”rx =“2”填滿=“#f87171”/>
<矩形x =“80”y =“50”寬度=“121”高度=“28”rx =“14”填滿=“#f87171”不透明度=“0.15”/>
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、企業、監控和操作。