使用docker快速部署elk

作者 uunnfly 日期 2019-03-24
使用docker快速部署elk

系统条件

  • 4G以上内存
  • jdk1.8
  • docker
  • 开启5601、5044、9200端口

安装流程

1. 拉取elk的docker

sudo docker pull sebp/elk

2. 修改系统配置

vim /etc/sysctl.conf
增加以下一行:
vm.max_map_count=262144

sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

4. 导出ssl证书

filebeat与logstash连通是通过ssl加密的,需要把证书放在filebeat端
查看容器信息:
docker ps
记下这个容器id

1
2
docker cp [containID]:/etc/pki/tls/certs/logstash-beats.crt .
ls

会看到当前目录下已经有了logstash-beats.crt文件

复制SSL证书

在您的ELK服务器上,将您创建的SSL证书复制到客户端服务器(替换客户端服务器的地址和您自己的登录名):

1
elk$ scp logstash-forwarder.crt user@client_server_private_address:/tmp

提供您的登录凭据后,确保证书复制成功。客户端服务器和ELK服务器之间的通信是必需的。

现在,在您的客户端服务器上,将ELK服务器的SSL证书复制到适当的位置(/etc/pki/tls/certs):

1
2
client$ sudo mkdir -p /etc/pki/tls/certs
client$ sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

5. Filebeat安装与配置

配置Filebeat

在客户端服务器上,创建并编辑Filebeat配置文件:

client$ sudo nano /etc/filebeat/filebeat.yml
在Filebeat inputs部分,找到enabled
enabled: true
找到paths

1
2
3
4
paths:
- /var/log/auth.log
- /var/log/syslog
#- /var/log/*.log

在elasticsearch output部分,把这个部分全部注释
在Logstash output部分,取消output.Logstash注释,并修改

1
2
3
4
output.logstash:
# The Logstash hosts
hosts: ["47.97.165.253:5044"]
bulk_max_size: 1024

打开SSL功能:
ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
保存并关闭
sudo /usr/share/filebeat/bin/filebeat configtest检查配置语法是否正确
yaml文件用缩进表示层级关系,缩进只能用空格,不能用Tab!缩进空格随便几个,但相同层级元素必须对齐

  • 若提示found a tab character that violate indentation. Exiting.,将该行前面的空格/tab全部删除
  • 若提示did not find expected key. Exiting找到与其同级的元素并使它们对齐

最后sudo /etc/init.d/filebeat start命令启动

测试Filebeat安装

如果您的ELK堆栈设置正确,Filebeat(在您的客户端服务器上)应该将您的日志发送到您的ELK服务器上的Logstash。Logstash应该使用我们之前导入的索引将Filebeat数据加载到Elasticsearch中。

在您的ELK服务器上,通过使用以下命令查询Filebeat索引来验证Elasticsearch确实正在接收数据:

elk$ curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
你应该看到一堆看起来像这样的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sample Output:
...
{
"_index" : "filebeat-2018.07.11",
"_type" : "doc",
"_id" : "AWSHFEbva9oX5PGasIk3",
"_score" : 1.0,
"_source" : {
"message" : "Jul 10 01:23:50 localhost sshd[19069]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=118.212.143.43 user=root",
"@version" : "1",
"@timestamp" : "2018-07-11T02:03:28.924Z",
"prospector" : {
"type" : "log"
},
"input" : {
"type" : "log"
},
"beat" : {
"name" : "VM-16-12-ubuntu",
"hostname" : "VM-16-12-ubuntu",
"version" : "6.3.1"
},
"host" : {
"name" : "VM-16-12-ubuntu"
},
"source" : "/var/log/auth.log",
"offset" : 6450510,
"tags" : [ "beats_input_codec_plain_applied" ]
}
}
...

如果您的输出总共显示0个点击(hits),则Elasticsearch不会在您搜索的索引下加载任何日志,您应该检查设置是否存在错误。如果您收到了预期的输出,请继续下一步。

若显示0hits,在客户端机器上查询filebeat是否传数据出去
sudo /usr/share/filebeat/bin/filebeat -e -d '*'

6. 自定义配置logstash

docker内的logstash默认会解析syslog与nginx,当需要解析其他格式日志或者修改其他配置时,需要手动配置
进入docker命令行:
docker exec -it elk /bin/bash
找到配置文件
cd /etc/logstash/conf.d/
可以在该目录下修改、删除、增加配置文件

最后重启logstash
/etc/init.d/logstash restart

7. 使用kibana

现在你可以打开ip:5601 查看收集的数据