软件开发 --- ELK 之初体验
功能强大的监控系统
ELK 是一个由 Elasticsearch、Logstash 和 Kibana 组成的开源技术栈,常用于日志收集、存储、搜索和分析。它的名称取自三个组件的首字母(E、L 和 K)。ELK 堆栈非常适用于大规模数据的实时分析,尤其在日志管理、监控和业务数据分析中广泛使用。
具体组成部分:
Elasticsearch:
是一个分布式搜索和分析引擎,能够存储大量数据,并提供高效的实时搜索和分析功能。Elasticsearch 基于 Apache Lucene,使用文档格式存储数据(通常是 JSON 格式),并支持全文搜索、结构化搜索、聚合分析等功能。
它是 ELK 的核心,负责存储数据并提供快速查询。
Logstash:
是一个强大的数据收集和处理工具。它能够从不同的来源(如日志文件、数据库、网络端口等)收集数据,对数据进行解析和转换,并将处理后的数据发送到 Elasticsearch 或其他存储系统。
Logstash 支持多种输入、过滤和输出插件,使得它在数据处理和转发方面非常灵活。
Kibana:
是一个可视化工具,用于展示存储在 Elasticsearch 中的数据。Kibana 提供了强大的图表、仪表板、报告等功能,帮助用户以图形化方式查看和分析数据。
通过 Kibana,用户可以创建交互式仪表板,实时查看数据分析结果,进行数据探索,发现潜在问题和趋势。
ELK 的常见使用场景:
日志管理:ELK 堆栈被广泛用于收集和分析各种日志(如应用程序日志、系统日志、安全日志等)。它能够帮助开发人员和运维人员快速定位问题,实时监控系统健康状态。
实时数据分析:使用 ELK 堆栈可以对大规模的日志数据进行实时分析,监控应用和系统的性能,及时发现异常。
性能监控:通过 Kibana 可视化数据,分析不同服务和系统的响应时间、错误率、访问量等指标,帮助进行性能调优。
安全事件检测:ELK 可以用于安全日志的收集与分析,帮助发现潜在的安全威胁和攻击行为。例如,监控失败的登录尝试,异常的网络访问等。
业务数据分析:ELK 不仅用于日志,还可以收集其他业务数据进行分析,帮助企业分析客户行为、网站访问量、销售情况等。
场景:网站访问日志分析
目标
- 收集和分析网站访问日志:我们要收集网站的访问日志,分析用户访问情况,查看访问量、页面浏览量等,并通过 Kibana 来可视化展示和生成报告。
- 实时监控和报警:比如,当某些页面的访问量异常时,触发报警。
步骤 1:准备数据源 — 网站访问日志
-
假设我们的网站访问日志格式如下:
127.0.0.1 - - [10/Oct/2020:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1024 127.0.0.1 - - [10/Oct/2020:13:55:37 +0000] "POST /login HTTP/1.1" 404 512
这些日志记录了访问 IP、请求时间、请求方法、请求的 URL、响应状态码和返回的数据量。
-
假设这些日志存储在文件
/var/log/nginx/access.log
中。
步骤 2:安装 ELK 堆栈
安装 Elasticsearch
Elasticsearch 是一个分布式搜索引擎,它将存储和索引我们收集到的日志数据。
# 下载并安装 Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.10.0-linux-x86_64.tar.gz
cd elasticsearch-7.10.0
./bin/elasticsearch
- 启动成功后,Elasticsearch 默认会运行在
localhost:9200
。
安装 Logstash
Logstash 是一个强大的数据收集和处理工具,能够从不同来源收集数据、进行处理并将其输出到 Elasticsearch。
# 下载并安装 Logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0.tar.gz
tar -xzf logstash-7.10.0.tar.gz
cd logstash-7.10.0
安装 Kibana
Kibana 用于数据可视化,它将通过 Elasticsearch 存储的数据来生成图表、仪表板等。
# 下载并安装 Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-linux-x86_64.tar.gz
tar -xzf kibana-7.10.0-linux-x86_64.tar.gz
cd kibana-7.10.0
步骤 3:配置 Logstash
Logstash 需要配置输入、过滤和输出,以便从网站访问日志文件中提取信息并将其存储到 Elasticsearch 中。
创建 Logstash 配置文件
- 创建一个名为
logstash.conf
的配置文件:
input {
file {
path => "/var/log/nginx/access.log" # 设置访问日志文件路径
start_position => "beginning" # 从文件的开头开始读取
sincedb_path => "/dev/null" # 不跟踪读取位置
}
}
filter {
grok {
match => { "message" => "%{IPV4:client_ip} - %{DATA:ident} %{DATA:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATH:request} HTTP/%{NUMBER:http_version}\" %{INT:status_code} %{INT:bytes}" }
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "access-log-%{+YYYY.MM.dd}" # 将数据存储到 Elasticsearch 中,按日期分索引
}
}
配置解释:
- 输入:从
/var/log/nginx/access.log
中读取日志文件内容。 - 过滤器:使用 grok 来解析日志行,将其拆解为 IP 地址、请求方法、URL 路径、响应状态码等字段。
- 输出:将解析后的日志数据输出到 Elasticsearch,存储在
access-log-日期
索引中。
启动 Logstash
运行 Logstash,开始收集和处理数据:
./bin/logstash -f logstash.conf
Logstash 会读取 /var/log/nginx/access.log
文件中的日志,并将解析后的数据发送到 Elasticsearch。
步骤 4:查看和分析数据 — Kibana
- 启动 Kibana:
cd kibana-7.10.0
./bin/kibana
Kibana 默认在 localhost:5601
上运行。
-
创建索引模式:
在 Kibana 中,创建一个索引模式来匹配 Logstash 输出到 Elasticsearch 的数据。步骤如下:
- 访问 Kibana,进入 Management -> Index Patterns。
- 点击 Create index pattern,输入
access-log-*
,以匹配所有日志索引。 - 选择
timestamp
字段作为时间字段,然后点击 Create index pattern。
-
查看实时日志:
在 Discover 页面,你可以实时查看日志数据。根据需要,你可以查看日志的不同字段(如 IP、请求方法、状态码等),并进行筛选、排序。
-
创建可视化图表:
- 请求方法统计:展示 GET 和 POST 请求的数量。
- 状态码统计:展示每种 HTTP 状态码的访问量,例如 200、404、500 等。
- 页面访问量:分析每个页面的访问量,以便找出最受欢迎的页面。
-
创建仪表板:
在 Dashboard 页面,你可以将多个图表和可视化展示集成在一个页面中,帮助你全面分析网站访问情况。比如:
- 网站访问趋势图:展示每日的访问量。
- 页面访问热度:展示不同页面的访问量。
- 错误页面监控:展示 404 错误页面的访问量。
步骤 5:实时监控与报警
-
设置报警规则:
在 Kibana 中,你可以设置监控和报警规则。例如:
- 如果某个页面的 404 错误次数超过某个阈值(如 100 次),则触发报警。
- 如果网站访问量突然暴增,可以设置阈值报警,提醒管理员检查服务器是否被攻击。
设置方式:进入 Alerts and Actions,定义你的报警规则,并选择报警通知方式(如邮件、Slack 等)。
-
监控仪表板:
设置定时刷新功能,确保你在 Kibana 中看到的是最新的数据。可以设置每隔 5 分钟或更短的时间间隔自动刷新仪表板,帮助你实时监控网站访问情况。
总结
在这个场景中,ELK 堆栈帮助你实现了:
- 集中化日志收集与存储:通过 Logstash 从网站日志文件中提取数据,并将其存储到 Elasticsearch。
- 数据分析与可视化:通过 Kibana,你可以查看、分析网站的访问量、错误率、流量趋势等数据。
- 实时监控与报警:利用 Kibana 的报警功能,实时监控网站的状态,并在出现异常时及时通知管理员。
例如,如果网站某个页面的 404 错误突然激增,Kibana 会通过报警通知你,帮助你及时修复问题,避免用户体验受损。