ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合,是目前开源界流行的实时数据分析方案,成为实时日志处理领域开源界的第壹选择。然而,ELK也并不是实时数据分析界的灵丹妙药,使用不恰当,反而会事倍功半。本书对ELK的原理进行了解剖,不仅分享了大量实战案例和实现效果,而且分析了部分源代码,使读者不仅知其然还知其所以然。读者可通过本书的学习,快速掌握实时日志处理方法,并搭建符合自己需要的大数据分析系统。本书分为三大部分,第壹部分“Logstash”介绍Logstash的安装与配置、场景示例、性能与测试、扩展方案、源码解析、插件开发等,第二部分“Elasticsearch”介绍Elasticsearch的架构原理、数据接口用例、性能优化、测试和扩展方案、映射与模板的定制、监控方案等,第三部分“Kibana”介绍Kibana3和Kibana5的特点对比,Kibana的配置、案例与源代码解析。
目录
- 前 言
- 第一部分 Logstash
- 第1章 入门示例 3
- 1.1 下载安装 3
- 1.2 Hello World 4
- 1.3 配置语法 8
- 1.3.1 语法 8
- 1.3.2 命令行参数 10
- 1.3.3 设置文件示例 11
- 1.4 插件安装 12
- 1.5 长期运行方式 13
- 第2章 插件配置 15
- 2.1 输入插件 15
- 2.1.1 标准输入 16
- 2.1.2 文件输入 17
- 2.1.3 TCP输入 18
- 2.1.4 syslog输入 19
- 2.1.5 http_poller抓取 21
- 2.2 编解码配置 22
- 2.2.1 JSON编解码 23
- 2.2.2 多行事件编码 24
- 2.2.3 网络流编码 26
- 2.2.4 collectd输入 27
- 2.3 过滤器配置 30
- 2.3.1 date时间处理 30
- 2.3.2 grok正则捕获 33
- 2.3.3 dissect解析 35
- 2.3.4 GeoIP地址查询 36
- 2.3.5 JSON编解码 38
- 2.3.6 key-value切分 38
- 2.3.7 metrics数值统计 40
- 2.3.8 mutate数据修改 41
- 2.3.9 随心所欲的Ruby处理 45
- 2.3.10 split拆分事件 47
- 2.3.11 交叉日志合并 48
- 2.4 输出插件 49
- 2.4.1 输出到Elasticsearch 49
- 2.4.2 发送email 54
- 2.4.3 调用系统命令执行 54
- 2.4.4 保存成文件 55
- 2.4.5 报警发送到Nagios 56
- 2.4.6 statsd 58
- 2.4.7 标准输出stdout 61
- 2.4.8 TCP发送数据 62
- 2.4.9 输出到HDFS 62
- 第3章 场景示例 64
- 3.1 Nginx访问日志 64
- 3.1.1 grok处理方式 64
- 3.1.2 split处理方式 65
- 3.1.3 JSON格式 68
- 3.1.4 syslog方式发送 69
- 3.2 Nginx错误日志 69
- 3.3 Postfix日志 71
- 3.4 Ossec日志 72
- 3.4.1 配置所有Ossec agent采用syslog输出 72
- 3.4.2 配置Logstash 72
- 3.4.3 推荐Kibana仪表盘 73
- 3.5 Windows系统日志 73
- 3.5.1 采集端配置 73
- 3.5.2 接收解析端配置 75
- 3.6 Java日志 77
- 3.6.1 Log4J配置 77
- 3.6.2 Logstash配置 78
- 3.6.3 异常堆栈测试验证 78
- 3.6.4 JSON Event layout 79
- 3.7 MySQL慢查询日志 80
- 3.8 Docker日志 82
- 3.8.1 记录到主机磁盘 82
- 3.8.2 通过logspout收集 83
- 第4章 性能与监控 85
- 4.1 性能测试 85
- 4.1.1 配置示例 85
- 4.1.2 使用方式 86
- 4.1.3 额外的话 87
- 4.2 监控方案 87
- 4.2.1 logstash-input-heartbeat心跳检测方式 88
- 4.2.2 JMX启动参数方式 89
- 4.2.3 API方式 90
- 第5章 扩展方案 94
- 5.1 通过Redis队列扩展 95
- 5.1.1 读取Redis数据 95
- 5.1.2 采用list类型扩展Logstash 96
- 5.1.3 输出到Redis 97
- 5.2 通过Kafka队列扩展 98
- 5.2.1 Kafka基础概念 99
- 5.2.2 Input配置 100
- 5.2.3 Output配置 101
- 5.2.4 性能 103
- 5.3 logstash-forwarder 103
- 5.3.1 Indexer端配置 104
- 5.3.2 Shipper端配置 104
- 5.3.3 AIX上的logstash-forwarder-java 106
- 5.4 Rsyslog 107
- 5.4.1 常用模块介绍 107
- 5.4.2 与Logstash合作 109
- 5.4.3 Mmexternal模块 109
- 5.5 Nxlog 112
- 5.6 Heka 114
- 5.7 Fluentd 115
- 5.7.1 配置示例 115
- 5.7.2 Fluentd插件 117
- 5.8 Message::Passing 117
- 第6章 Logstash源码解析 119
- 6.1 Pipeline 120
- 6.2 Plugins 122
- 第7章 插件开发 125
- 7.1 插件格式 125
- 7.2 插件的关键方法 126
- 7.3 插件打包 127
- 7.4 Filter插件开发示例 128
- 7.4.1 mmdb数据库的生成方法 129
- 7.4.2 LogStash::Filters::Mmdb实现 130
- 7.4.3 logstash-filter-mmdb打包 131
- 7.5 Input插件开发示例 132
- 7.5.1 FileWatch模块原理 132
- 7.5.2 LogStash::Inputs::Utmp实现 133
- 7.6 Output插件开发示例 136
- 第8章 Beats 138
- 8.1 libbeat的通用配置 138
- 8.1.1 过滤器配置 138
- 8.1.2 输出配置 139
- 8.1.3 shipper网络配置 142
- 8.1.4 日志配置 142
- 8.1.5 运行配置 142
- 8.2 Filebeat 142
- 8.2.1 安装部署 143
- 8.2.2 配置 144
- 8.2.3 生成的可用字段 145
- 8.3 packetbeat抓包分析 145
- 8.3.1 安装部署 146
- 8.3.2 配置示例 146
- 8.3.3 dashboard效果 147
- 8.3.4 Kibana 3拓扑图 148
- 8.4 metricbeat 150
- 8.4.1 配置示例 152
- 8.4.2 各模块输出指标示例 152
- 8.4.3 采集Docker中的指标 164
- 8.5 winlogbeat 164
- 第二部分 Elasticsearch
- 第9章 架构原理 169
- 9.1 准实时索引的实现 169
- 9.1.1 动态更新的Lucene索引 169
- 9.1.2 利用磁盘缓存实现的准实时检索 170
- 9.1.3 translog提供的磁盘同步控制 171
- 9.2 segment merge的影响 172
- 9.2.1 归并线程配置 173
- 9.2.2 归并策略 174
- 9.2.3 forcemerge接口 174
- 9.3 routing和replica的读写过程 174
- 9.3.1 路由计算 175