通过使用【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结合使用,可以实现对任意数据的搜索、分析和可视化。

undefined

Elasticsearch服务是什么?

这是一个AWS的全托管服务,可以轻松部署Elasticsearch的执行环境。
它内置了Kibana,可以在部署后立即开始数据分析。
不仅是全托管的,无需管理基础架构,而且ES集群会在VPC中创建,这意味着可以轻松创建一个在内部网络中完全封闭,没有与外部连接点的分析环境。

亚马逊 Elasticsearch 服务

实现

    • AWSでElasticsearchの実行環境の作成する

 

    • LogstashでALBのアクセスログを収集し、送信元IPから送信元の都道府県を特定する

 

    KibanaのVisualizeでRegion Mapの設定を行い、アクセスが多い地域・少ない地域が一目で分かるマップを作成する

形成

undefined

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。

スクリーンショット 2020-10-21 104057.png
undefined

可视化后的地区地图

<图像①>确认国内访问量
スクリーンショット 2020-10-22 115608.png
确认海外访问量

你可以在下面的地图上确认世界各地的访问趋势。
尽管国内访问最多是很自然的,但是我意想不到的是发现了来自海外的访问(攻击)居然如此频繁(令人害怕)。

スクリーンショット 2020-10-22 120041.png

请参考以下原文链接。

使用logstash-output-amazon_es将数据投入到Amazon Elasticsearch Service中
在Amazon Linux2上运行Logstash7.5的启动步骤

最后

这次我们着重关注发送者地图的显示,但是如果以ALB访问日志作为目标数据,也可以用图表将按日或按时间段的访问趋势等可视化呈现。
另外,Kibana还可以将多个图表和表格整合在一个仪表板中显示。

ダッシュボード.png

用这种方式,甚至仅通过分析访问日志,就可以收集到各种信息。
使用ALB的场景很多,而且分析的数据也可以在营销等方面进行利用,所以如果还没有尝试过的话,请务必挑战一下。

广告
将在 10 秒后关闭
bannerAds