●第1章 引言 1
1.1 內容概覽 2
1.2 監控的定義 2
1.2.1 業務客戶 2
1.2.2 IT 客戶 2
1.3 監控的實際存在形式 2
1.3.1 手動、用戶發起或無監控階段 3
1.3.2 被動式監控階段 3
1.3.3 主動式監控階段 4
1.4 模型分布 4
1.5 實施主動式監控 5
1.6 本書內容 7
1.7 工具的選擇 8
第2章 監控框架 9
2.1 黑盒與白盒 10
2.2 以事件、日志、指標為中心 11
2.2.1 更多關於指標的知識 11
2.2.2 指標的定義 12
2.2.3 指標的類型 13
2.2.4 指標小結 14
2.2.5 指標聚合 15
2.3 上下文和有價值的通知 16
2.4 可視化 17
2.5 傳統監控有何問題 18
2.5.1 靜態配置 18
2.5.2 不靈活的邏輯和閾值 18
2.5.3 以目標對像為中心 19
2.5.4 寵物和肉牛的插曲 19
2.5.5 新方法的不同之處 20
2.5.6 更智能的閾值輸入 20
2.6 為監控框架采集數據 27
2.7 小結 28
第3章 使用Riemann管理事件和指標 29
3.1 Riemann簡介 30
3.1.1 Riemann的架構和實現 30
3.1.2 安裝Riemann 31
3.2 配置Riemann 35
3.2.1 學習Clojure 35
3.2.2 Riemann的基礎配置 35
3.2.3 事件、流、索引 38
3.2.4 配置事件、流、索引 40
3.2.5 向Riemann發送事件 43
3.2.6 創建Riemann監控檢測 44
3.2.7 Riemann過濾的一個小插曲 45
3.3 連接Riemann服務器 47
3.3.1 配置上遊Riemann服務器 48
3.3.2 配置下遊Riemann服務器 50
3.3.3 向下遊發送Riemann事件 51
3.4 在上遊Riemann服務器發出告警 52
3.4.1 Riemann事件限流 57
3.4.2 彙總Riemann事件 57
3.4.3 電子郵件通知的替代工具 58
3.5 測試Riemann配置 58
3.6 驗證Riemann配置 60
3.7 性能、可伸縮性、高可用性 61
3.8 Riemann的替代工具 63
3.9 小結 63
第4章 Graphite和Grafana 64
4.1 Graphite簡介 64
4.1.1 Carbon 65
4.1.2 Whisper 65
4.1.3 Graphite Web、Graphite-API、Grafana 66
4.2 Graphite的架構 66
4.3 安裝Graphite 66
4.3.1 在Ubuntu上安裝Graphite 68
4.3.2 在Red Hat上安裝Graphite 68
4.3.3 安裝Graphite-API 70
4.3.4 安裝Grafana 71
4.3.5 通過配置管理工具安裝Graphite和Grafana 73
4.4 配置Graphite和Carbon 73
4.4.1 配置Carbon指標的留存模式 78
4.4.2 估算Graphite存儲空間 80
4.4.3 Carbon和Graphite服務管理 81
4.5 配置Graphite-API 84
4.5.1 Graphite-API的服務管理 86
4.5.2 測試Graphite-API 87
4.6 配置Grafana 87
4.7 為Graphite配置Riemann 91
4.8 Grafana簡介 95
4.9 Graphite和Carbon冗餘 100
4.10 時間和時區 103
4.10.1 手動管理時間 103
4.10.2 通過配置管理工具管理時間 106
4.10.3 檢查時間狀態 107
4.11 Graphite和Grafana的替代工具 107
4.11.1 商業工具 107
4.11.2 開源工具 108
4.12 Whisper的替代工具 108
4.12.1 InfluxDB 108
4.12.2 Cyanite 109
4.13 小結 109
第5章 監控主機 110
5.1 collectd簡介 111
5.2 應該監控哪些主機組件 112
5.3 安裝collectd 113
5.3.1 在Ubuntu上安裝collectd 113
5.3.2 在Red Hat上安裝collectd 114
5.3.3 通過配置管理工具安裝collectd 115
5.4 配置collectd 115
5.4.1 加載和配置collectd插件來進行監控 118
5.4.2 最後的準備 130
5.4.3 啟用和運行collectd 130
5.5 collectd事件 130
5.6 將collectd事件發送到Graphite 132
5.7 重構collectd指標名稱 133
5.8 小結 136
第6章 在Riemann中使用collectd事件 137
6.1 檢測正在運行的進程 137
6.2 其他行動和改進 141
6.3 重復一些傳統監控 142
6.4 通過更智能的數據進行更好的監控 143
6.4.1 構建基於中位數的檢測 143
6.4.2 使用百分位數進行基於主機的檢測 144
6.4.3 對檢測進行抽像 145
6.4.4 對檢測進行組織 149
6.5 使用Grafana繪制collectd指標 149
6.5.1 創建主機看板 150
6.5.2 創建第一個主機圖表 151
6.5.3 創建內存圖表 154
6.5.4 單個主機圖表 155
6.5.5 其他圖表 156
6.6 網絡、設備和Microsoft Windows監控 156
6.7 collectd的替代工具 157
6.7.1 商業工具 157
6.7.2 開源工具 157
6.8 小結 158
第7章 容器——另一種類型的主機 159
7.1 容器監控面臨的挑戰 159
7.2 監控Docker容器 162
7.2.1 Docker collectd插件 163
7.2.2 安裝Docker collectd插件 164
7.2.3 配置Docker collectd插件 165
7.3 使用Riemann處理Docker collectd的統計信息 166
7.4 為Docker指標指定不同的解析度 176
7.5 清理舊的Graphite Docker指標 177
7.6 使用Docker 指標進行監控 177
7.7 其他容器監控工具 178
7.8 小結 179
第8章 日志 180
8.1 ELK技術棧入門 180
8.2 Logstash架構 181
8.3 安裝Logstash 183
8.3.1 在Debian和Ubuntu上安裝Java 183
8.3.2 在Red Hat上安裝Java 183
8.3.3 測試Java是否安裝成功 183
8.3.4 在Ubuntu和Debian上安裝Logstash包 183
8.3.5 在Red Hat上安裝Logstash包 184
8.3.6 通過配置管理工具安裝Logstash 184
8.3.7 測試Logstash是否已安裝成功 185
8.4 配置Logstash 185
8.5 安裝Elasticsearch 187
8.5.1 在Debian和Ubuntu上安裝Java 187
8.5.2 在Red Hat上安裝Java 188
8.5.3 通過配置管理工具安裝Elasticsearch 189
8.5.4 測試Elasticsearch是否安裝成功 189
8.5.5 確定Elasticsearch正在運行 189
8.6 配置Elasticsearch集群和節點 190
8.7 時間和時區 193
8.8 集成Logstash和Elasticsearch 193
8.8.1 Logstash內部會發生什麼 195
8.8.2 Elasticsearch內部會發生什麼 200
8.9 安裝Kibana 201
8.10 配置Kibana 202
8.11 運行Kibana 203
8.12 通過Syslog將主機連接到Logstash 205
8.12.1 配置Logstash 205
8.12.2 Syslog概覽 206
8.12.3 配置Syslog 207
8.13 記錄Docker日志 209
8.14 將數據從Logstash發送到Riemann 214
8.15 將數據從Riemann發送到Logstash 216
8.16 伸縮擴展Logstash和Elasticsearch 219
8.16.1 伸縮擴展Logstash 219
8.16.2 伸縮擴展Elasticsearch 220
8.17 監控組件 221
8.17.1 監控RSyslog 221
8.17.2 監控Logstash 221
8.17.3 監控Elasticsearch 226
8.18 Logstash的替代方案 229
8.18.1 Splunk 229
8.18.2 Heka 229
8.18.3 Graylog 229
8.18.4 mtail 229
8.19 小結 229
第9章 構建可監控的應用程序 230
9.1 應用程序監控入門 231
9.1.1 應該在哪裡測量 231
9.1.2 測量模式 232
9.1.3 時間和觀察者效應 232
9.2 指標 233
9.2.1 應用程序指標 233
9.2.2 業務指標 233
9.2.3 監控模式或放置指標的位置 233
9.2.4 工具模式 233
9.2.5 外部模式 234
9.2.6 在示例應用程序中構建指標 235
9.3 日志 248
9.3.1 添加自己的結構化日志條目 249
9.3.2 將結構化日志添加到示例應用程序 250
9.3.3 使用現有日志 255
9.4 健康檢查、端點和外部監控 258
9.5 部署 262
9.5.1 向示例應用程序添加部署通知 262
9.5.2 使用部署事件 264
9.6 跟蹤 267
9.7 小結 267
第10章 通知 268
10.1 目前的通知 269
10.2 更新expired事件配置 269
10.3 升級電子郵件通知 269
10.3.1 格式化電子郵件主題 271
10.3.2 格式化電子郵件正文 271
10.4 為通知添加圖表 275
10.4.1 定義數據源 276
10.4.2 定義查詢參數 277
10.4.3 定義圖表面板和行 279
10.4.4 繪制看板 280
10.4.5 將看板添加到Riemann通知中 281
10.4.6 一些腳本化看板示例 282
10.4.7 其他上下文 283
10.5 添加Slack作為目的地 283
10.6 添加PagerDuty作為目的地 286
10.7 維護和停機 289
10.8 從通知中學習 292
10.9 其他告警工具 295
10.10 小結 295
第11章 監控之巔:監控Tornado 296
11.1 Tornado應用程序 297
11.2 監控策略 299
11.3 標記Tornado事件 299
11.4 監控Tornado:Web層 300
11.4.1 監控HAProxy 301
11.4.2 監控Nginx 309
11.4.3 解決Web層的監控問題 316
11.4.4 在Riemann中設置Tornado檢測 318
11.4.5 webtier函數 320
11.5 向Riemann添加Tornado檢測 325
11.6 小結 326
第12章 監控Tornado:應用程序層 327
12.1 監控應用程序層的JVM 327
12.2 采集應用程序層的JVM日志 331
12.3 監控Tornado API應用程序 334
12.4 解決Tornado應用程序層監控的關注點 339
12.5 小結 342
第13章 監控Tornado:數據層 343
13.1 監控數據層的MySQL服務器 343
13.1.1 使用MySQL數據作為指標 346
13.1.2 查詢的執行時間 349
13.2 監控數據層的Redis服務器 351
13.3 解決Tornado數據層的監控 353
13.4 Tornado看板 355
13.5 擴展Tornado之外的監控 360
13.6 小結 361
附錄 淺談Clojure和函數式編程 362