第 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.1Riemann簡介30
3.1.1 Riemann的架構和實現30
3.1.2 安裝Riemann31
3.2配置Riemann35
3.2.1 學習Clojure35
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.8Riemann的替代工具63
3.9小結63
第4章Graphite和Grafana64
4.1Graphite簡介64
4.1.1 Carbon65
4.1.2 Whisper65
4.1.3 Graphite Web、Graphite-API、Grafana66
4.2Graphite的架構66
4.3安裝Graphite66
4.3.1 在Ubuntu上安裝Graphite68
4.3.2 在Red Hat上安裝Graphite68
4.3.3 安裝Graphite-API70
4.3.4 安裝Grafana71
4.3.5 通過配置管理工具安裝Graphite和Grafana73
4.4配置Graphite和Carbon73
4.4.1 配置Carbon指標的留存模式78
4.4.2 估算Graphite存儲空間80
4.4.3 Carbon和Graphite服務管理81
4.5配置Graphite-API84
4.5.1 Graphite-API的服務管理86
4.5.2 測試Graphite-API87
4.6配置Grafana87
4.7為Graphite配置Riemann91
4.8Grafana簡介95
4.9Graphite和Carbon冗餘100
4.10時間和時區103
4.10.1 手動管理時間103
4.10.2 通過配置管理工具管理時間106
4.10.3 檢查時間狀態107
4.11Graphite和Grafana的替代工具107
4.11.1 商業工具107
4.11.2 開源工具108
4.12Whisper的替代工具108
4.12.1 InfluxDB108
4.12.2 Cyanite109
4.13小結109
第5章監控主機110
5.1collectd簡介111
5.2應該監控哪些主機組件112
5.3安裝collectd113
5.3.1 在Ubuntu上安裝collectd113
5.3.2 在Red Hat上安裝collectd114
5.3.3 通過配置管理工具安裝collectd115
5.4配置collectd115
5.4.1 加載和配置collectd插件來進行監控118
5.4.2 最後的準備130
5.4.3 啟用和運行collectd130
5.5collectd事件130
5.6將collectd事件發送到Graphite132
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.7collectd的替代工具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.1ELK技術棧入門180
8.2Logstash架構181
8.3安裝Logstash183
8.3.1 在Debian和Ubuntu上安裝Java183
8.3.2 在Red Hat上安裝Java183
8.3.3 測試Java是否安裝成功183
8.3.4 在Ubuntu和Debian上安裝Logstash包183
8.3.5 在Red Hat上安裝Logstash包184
8.3.6 通過配置管理工具安裝Logstash184
8.3.7 測試Logstash是否已安裝成功185
8.4配置Logstash185
8.5安裝Elasticsearch187
8.5.1 在Debian和Ubuntu上安裝Java187
8.5.2 在Red Hat上安裝Java188
8.5.3 通過配置管理工具安裝Elasticsearch189
8.5.4 測試Elasticsearch是否安裝成功189
8.5.5 確定Elasticsearch正在運行189
8.6配置Elasticsearch集群和節點190
8.7時間和時區193
8.8集成Logstash和Elasticsearch193
8.8.1 Logstash內部會發生什麼195
8.8.2 Elasticsearch內部會發生什麼200
8.9安裝Kibana201
8.10配置Kibana202
8.11運行Kibana203
8.12通過Syslog將主機連接到Logstash205
8.12.1 配置Logstash205
8.12.2 Syslog概覽206
8.12.3 配置Syslog207
8.13記錄Docker日志209
8.14將數據從Logstash發送到Riemann214
8.15將數據從Riemann發送到Logstash216
8.16伸縮擴展Logstash和Elasticsearch219
8.16.1 伸縮擴展Logstash219
8.16.2 伸縮擴展Elasticsearch220
8.17監控組件221
8.17.1 監控RSyslog221
8.17.2 監控Logstash221
8.17.3 監控Elasticsearch226
8.18Logstash的替代方案229
8.18.1 Splunk229
8.18.2 Heka229
8.18.3 Graylog229
8.18.4 mtail229
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章 監控之巔:監控Tornado296
11.1Tornado應用程序297
11.2監控策略299
11.3標記Tornado事件299
11.4監控Tornado:Web層300
11.4.1 監控HAProxy301
11.4.2 監控Nginx309
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監控應用程序層的JVM327
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.4Tornado看板355
13.5擴展Tornado之外的監控360
13.6小結361
附錄淺談Clojure和函數式編程362