ApacheのログをELK環境で可視化した


お前は誰だ?

IPFactory所属の1年です
honeypotに関する事やってたりします

やったこと

コンソール上でログ見るのつらすぎ。泣いちゃう

というわけでログを可視化してみることにした

ELKとは

Elastic search, Kibana, Logstashの略
それぞれの役割は以下の通り

  • Elastic search : データ検索
  • Kibana : 可視化
  • Logstash : データ取り込み

環境

Ubuntu18.04
Apache2.4.29

導入

Elasticsearch

apt install -y apt-transport-https
wget https://artifacts.elastic.co/GPG-KEY-elasticsearch
apt-key add GPG-KEY-elasticsearch
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
apt update
apt install -y elasticsearch
#elasticsearch起動
systemctl start elasticsearch

起動後 http://localhost:9200 にアクセスし、このようなJSONが返ってくればうまく動作している

{
  "name" : "ubuntu",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "4lR3_HlKTa--IPJr8xLTxA",
  "version" : {
    "number" : "7.5.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "e9ccaed468e2fac2275a3761849cbee64b39519f",
    "build_date" : "2019-11-26T01:06:52.518245Z",
    "build_snapshot" : false,
    "lucene_version" : "8.3.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Logstash

apt install -y logstash

ルールを作成する

/etc/logstash/conf.d/apache2.conf
input {
   file {
      mode => "tail"
      path => ["/var/log/apache2/access.log"]
   }
}
filter {
   grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
   }
   date {
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
      locale => "en"
   }
}
output {
   elasticsearch {
      hosts => ["localhost:9200"]
      index => "apache2"
   }
}

elasticsearchを起動する
なぜかsystemctlで動かすとうまく動作しなかったのでこうした

/usr/share/logstash -f /etc/logstash/conf.d/apache2.conf

起動後、以下のコマンドを実行し動作確認

curl http://localhost:9200/_cat/health?v
#indexにapache2があればうまく動作している
health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   apache2                   L59zRp1nQqWGdrJJEZS5Gw   1   1         12            0     56.5kb         56.5kb
green  open   .kibana_task_manager_1   CAup6rtVTsi6tD2tFxdy0A   1   0          2            0       57kb           57kb
green  open   .apm-agent-configuration GvocK76nQlaOEsViuM0o2Q   1   0          0            0       283b           283b
green  open   .kibana_2                wPziMyNSSBuIPmQ6wqMpSg   1   0          6            0     29.1kb         29.1kb
green  open   .kibana_1                uRrfym5VS4qC_x70142Emg   1   0          1            0        4kb            4kb
green  open   .tasks                   hQ70Y5N7TsGdOBw-SO8p5g   1   0          1            0      6.3kb          6.3kb


Kibana


apt install -y kibana
#kinaba起動
systemctl start kibana

起動後 http://localhost:5601 にアクセスし、それっぽい画面が表示されればうまく動作している
続いてKibanaの左メニューから Management > Index Patterns > Create Index Pattern の順に進む
Index patternの部分にapache2と入力し、Next Stepを押す
Time Filer field nameのドロップダウンリストで @timestamp を選択後、Create index patternと書かれたボタンを押す
左メニューのDiscoverをクリックすることでログの表、グラフが見れる

最後に

  • logstashのオプションが多く、全て理解していない
  • kibanaのグラフがアクセス数だけしかないので実用に程遠い

など問題点がいくつかあるので、今後解決していきたい