AWS EC2 建立ELK+filebeat @Docker

ELK@Docker

環境:AWS EC2 4G Ram以上的機器

ELK部分

  1. 安裝docker
    1
    2
    3
    4
    5
    sudo yum install docker -y

    sudo usermod -a -G docker ec2-user

    sudo service docker start

安裝docker-compose

1
curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

1
chmod +x /usr/local/bin/docker-compose

退出cmd重登,讓剛剛權限設定生效

  1. 下載elk dockerfile
    
    先設定vm.max_map_count 不然雙分頁起不起來

    1
    sudo sysctl -w vm.max_map_count=262144
  2. 更改folder權限

    1
    2
    chmod -R 0777 html/
    chmod -R 0777 datas/
  3. 啟動

    1
    docker-compose up -d --build

FileBeat部分

Filebeat可以用docker單起向別台ELK send log

原Repo路徑是指向同一包中的nginx,如果要修改成指向系統下的nginx路徑就要修改以下地方

  1. 修改docker-compose.yml的volumes

volumes:- /var/log/nginx:/var/log/nginx/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
filebeat:
#mem_limit: 1024m
build:
context: ./filebeat
args:
ELK_VERSION: $ELK_VERSION
container_name: elk_c_filebeat
image: elk_i_filebeat:1.0.0
volumes:
- /var/log/nginx:/var/log/nginx/
external_links:
- logstash
networks:
#- default
- backend
  1. 修改filebeat.yml

path
這邊的path也是設定為接收同包nginx的log

要接收本機的要修改為
`paths:

- /var/log/nginx/access.log`

這邊的log設定是配合/etc/nginx/nginx.conf中的設定

目前皆以預設值做設定,當然也可以自訂其他路徑和檔名,但要與filebeat中ㄧ致

tags也可以自訂,但要跟ELK接收端filter一致

和output

hosts: ["遠端主機ip或domain:5044"]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
filebeat:
prospectors:
- input_type: log
paths:
- /var/log/nginx/access.log
tags: ["elk-nginx-access"]

- input_type: log
paths:
- /var/log/nginx/error.log
tags: ["elk-nginx-error"]

output:
logstash:
hosts: ["logstash:5044"]
  1. 修改本機端nginx log權限

這邊是以ec2-user為範例,如果不是這個user自行修改對應的就好

1
2
sudo chown nginx:ec2-user nginx
sudo chmod -R 777 nginx
  1. 啟動filebeat後進去確認log有無成功匯入
1
2
docker exec -u 0 -it [dockerid] bash
cd /var/log/nginx

Logstash接收部分

  1. 修改filebeat.conf的tag部分對應filter/output
1
else if "dev-backend-nginx-access" in [tags]

Source

強者同事Derek的elk repo

自行微調後的repo