我尝试使用Docker搭建了ELK(Elasticsearch Logstash Kibana)

首先

我在Docker上尝试使用Logstash将应用程序(NGINX)的日志传输到Elasticsearch,并在Kibana中进行显示。我将这些步骤作为备忘录保留下来。

环境

–バージョンOSCentOS Linux release 7.5.1804 (Core)Docker18.06.1-ceElasticsearch6.4.3Logstash6.4.3Kibana6.4.3nginx1.10

操作步骤 (Caozuo buzhou)

备好

#Dockerに共有するフォルダを作成
sudo mkdir -p /data/elk
sudo chown user:user /data/elk
#elasticsearch用共有フォルダ作成
mkdir /data/elk/elasticsearch
#logstash用共有フォルダ作成
mkdir -p /data/elk/logstash/pipeline
#nginx用共有フォルダ作成
mkdir -p /data/elk/log/nginx

启动Nginx

docker run -d --restart always -v /data/elk/log/nginx:/var/log/nginx -p 80:80 nginx:1.10

启动后,访问http://${hostip}进行确认。

启动elasticsearch

docker run -d --restart always -v /data/elk/elasticsearch:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"  --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.3

启动后,访问http://${hostip}:9200以进行确认。

将logstash配置文件放置在指定位置。

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => beginning
  }
}

filter {
  grok {
    match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
    remove_field => "message"
  }
  mutate {
    add_field => { "read_timestamp" => "%{@timestamp}" }
  }
  date {
    match => [ "[nginx][access][time]", "dd/MMM/YYYY:H:m:s Z" ]
    remove_field => "[nginx][access][time]"
  }
  useragent {
    source => "[nginx][access][agent]"
    target => "[nginx][access][user_agent]"
    remove_field => "[nginx][access][agent]"
  }
  geoip {
    source => "[nginx][access][remote_ip]"
    target => "[nginx][access][geoip]"
  }
}

output {
  elasticsearch {
    hosts => [ 'elasticsearch' ]
    index => "access_log1"
  }
}

启动Logstash

docker run -d --restart always -v /data/elk/logstash/pipeline:/usr/share/logstash/pipeline -v /data/elk/log:/var/log --link elasticsearch:elasticsearch  --name logstash docker.elastic.co/logstash/logstash-oss:6.4.3

启动后,访问http://{hostip}:9200/_cat/count/access_log1,并确认已开始日志传输。

启动Kibana

docker run -d --restart always -p 5601:5601 --link elasticsearch:elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 --name kibana docker.elastic.co/kibana/kibana-oss:6.4.3

起动之后,访问http://{hostip}:5601,将会显示Kibana界面。
打开左侧的“开发工具”,在“控制台”输入“GET /access_log1/_search?pretty=true”,然后点击绿色的“▶”,右侧将显示nginx的访问日志。

请参阅相关资料

以下是一份以中文本地化的选项:

https://qiita.com/va034600/items/b4b96faa36949b04d103
https://blog.manabusakai.com/2018/05/使用ELK堆栈分析ELB日志/
https://www.elastic.co/guide/cn/elasticsearch/reference/当前版本/docker.html

bannerAds