通过使用【AWS】Elasticsearch服务(Elasticsearch+Kibana)和Logstash来分析ALB访问日志,并在地图上可视化发送方的地区
首先
最近有一个机会要处理一个要求,他想知道在AWS的EC2上运行的Web应用程序中,国内的哪个地区的用户利用最多。
使用Elasticsearch的Kibana工具,可以通过「区域地图」将数据可视化。
我們可以利用這個方法從ALB的訪問日誌中的源IP地址信息來確定源地區,並將其在Kibana的地圖上可視化。因此,在本次文章中,我們想介紹這個方法。
目标群体
-
- Elasticsearchについて知りたい方
-
- AWSのElasticsearch Serviceについて知りたい方
-
- ALBのアクセスログを可視化してみたい方
- KibanaのVisualizeでRegion Mapを使ってみたい方 など
Elasticsearch是一种搜索引擎技术。
这是一个开源的数据搜索引擎。通过与数据收集管道Logstash和可视化工具Kibana结合使用,可以实现对任意数据的搜索、分析和可视化。
Elasticsearch服务是什么?
这是一个AWS的全托管服务,可以轻松部署Elasticsearch的执行环境。
它内置了Kibana,可以在部署后立即开始数据分析。
不仅是全托管的,无需管理基础架构,而且ES集群会在VPC中创建,这意味着可以轻松创建一个在内部网络中完全封闭,没有与外部连接点的分析环境。
亚马逊 Elasticsearch 服务
实现
-
- AWSでElasticsearchの実行環境の作成する
-
- LogstashでALBのアクセスログを収集し、送信元IPから送信元の都道府県を特定する
- KibanaのVisualizeでRegion Mapの設定を行い、アクセスが多い地域・少ない地域が一目で分かるマップを作成する
形成
1. 重要事项
2. 需要注意的要点
3. 值得注意的事项
4. 应该留意的问题
-
- 2020年10月時点の情報です。
-
- AWSマネジメントコンソールを使用します。ルートユーザもしくは権限を満たすIAMユーザを利用できる前提で進めます。
- AWS利用料にご注意ください。利用料については、AWSの公式ページをご参照ください。
环境建设
前提 (Qian Ti)
・Elasticsearch 服务
→ 版本:7.7
・Logstash 服务器
→ AMI:亚马逊 Linux2
→ 实例类型:t2.small
※ 当使用微型实例时,由于内存不足,Logstash 无法正常运行。推荐使用 small 或以上型号。
→ Logstash 版本:7.9.0
建立流程
1. 启用ELB日志,并创建输出用的S3存储桶。
请参阅以下步骤说明。
创建ES集群。
-
- 本番稼働用はマルチAZ構成となるため、シングル構成で問題ない場合は開発/テスト用を選択
-
- インターネットでVPCの外からKibanaにアクセスしたいため、ネットワーク構成はパブリックアクセスを選択
- Cognitoの設定を行い、Kibanaログインに認証を追加
有关Cognito设置,请参考此处。
3. 使用EC2实例创建并登录到Logstash。
4. 安装Logstash
安装OpenJDK
yum install java-1.8.0-openjdk -y
创建仓库
vi /etc/yum.repos.d/logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
安装Logstash
yum install logstash -y
添加Amazon_ES插件
/usr/share/logstash/bin/logstash-plugin install logstash-output-amazon_es
5. logstash.conf的配置
vi /etc/logstash/logstash.conf
input {
s3 {
tags => "alb"
bucket => "<バケット名>"
region => "<リージョンコード>"
interval => "60"
sincedb_path => "/var/lib/logstash/sincedb_alb"
}
}
filter {
grok {
match => [ "message", "%{ELB_ACCESS_LOG}" ]
}
date {
match => [ "timestamp", "ISO8601" ]
target => "@timestamp"
}
geoip {
source => "clientip"
}
if [geoip][region_code] {
mutate {
add_field => {
"[geoip][region_iso_code]" => "%{[geoip][country_code2]}-%{[geoip][region_code]}"
}
}
}
mutate {
remove_field => ["timestamp", "message"]
}
}
output {
amazon_es {
hosts => ["<Elasticsearch Serviceのエンドポイント>"]
region => "<リージョンコード>"
index => "<設定したいインデックス名>-%{+YYYY.MM.dd}"
}
}
6.启动Logstash
cd /usr/share/logstash
bin/logstash -f "/etc/logstash/logstash.conf"
7. Kibana 登录与设置
在logstash.conf中添加index名称并创建index pattern。
可视化后的地区地图
<图像①>确认国内访问量
确认海外访问量
你可以在下面的地图上确认世界各地的访问趋势。
尽管国内访问最多是很自然的,但是我意想不到的是发现了来自海外的访问(攻击)居然如此频繁(令人害怕)。
请参考以下原文链接。
使用logstash-output-amazon_es将数据投入到Amazon Elasticsearch Service中
在Amazon Linux2上运行Logstash7.5的启动步骤
最后
这次我们着重关注发送者地图的显示,但是如果以ALB访问日志作为目标数据,也可以用图表将按日或按时间段的访问趋势等可视化呈现。
另外,Kibana还可以将多个图表和表格整合在一个仪表板中显示。
用这种方式,甚至仅通过分析访问日志,就可以收集到各种信息。
使用ALB的场景很多,而且分析的数据也可以在营销等方面进行利用,所以如果还没有尝试过的话,请务必挑战一下。