Docker安装ELK8.x(踩坑记录)
# Docker安装ELK8.x(踩坑记录)
参考网站:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-prod-prerequisites
参考书籍:https://weread.qq.com/book-detail?type=1&senderVid=364791933&v=2a532390813ab8882g016839&wtheme=white&wfrom=app&wvid=364791933&scene=bottomSheetShare
# 1、前置条件
# 1.1、安装Docker
不在本篇文章探讨范围内
# 1.2、修改文件描述符数目
为什么要修改该配置呢?
首先,Elasticsearch在节点和HTTP客户端之间进行通信使用了大量的套接字,而套接字需要足够的文件描述符支持。
其次,在许多Linux发行版本中,每个进程默认有1024个文件描述符,这对Elasticsearch节点来说实在是太低了,何况该节点要处理数以百计的索引,所以要调大这个默认值
设置步骤如下:
# 设定同时打开文件数的最大值为65535
vim /etc/profile
# 增加一行
ulimit -n 65535
# 使命令生效
source /etc/profile
vim /etc/security/limits.conf
# 限制打开文件数为65535
* soft nofile 65535
* hard nofile 65535
# 验证修改操作是否成功
ulimit -a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.3、修改最大映射数量
Elasticsearch对各种文件混合使用了niofs(非阻塞文件系统)和mmapfs(内存映射文件系统),以实现对各种文件的优化处理。为了保证系统的顺畅运行,需要合理配置最大映射数量(MMP),以便有足够的虚拟内存可用于内存映射的文件
设置步骤如下:
vim /etc/sysctl.conf
vm.max_map_count=262144
# 重新生效
sysctl -p
1
2
3
4
2
3
4
# 2、安装es:8.15.3(单机部署)
# 下载elasticsearch镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.15.3
# 创建网络,方便后续es和kibana两个容器通信,默认网络驱动为brige
docker network create elastic
# 运行容器 设置网络、端口映射、容器内存、esJVM内存
docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 -it -m 4GB -e ES_JAVA_OPTS="-Xms2g -Xmx2g" docker.elastic.co/elasticsearch/elasticsearch:8.15.3
# 运行结束后会打印信息,需要进行记录。后续使用!!如下图
# 容器启动成功后,浏览器进行访问,(注意:必须使用https)
https://容器所在机器的IP:9200/
# 输入之前打印信息中的用户名密码即可登录成功
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3、安装Kibana:8.15.3(单机部署)
# 下载Kibana镜像
docker pull docker.elastic.co/kibana/kibana:8.15.3
# 运行容器,使用之前创建的elastic网络
docker run -d --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.15.3
# 持续监控Kibana日志
docker logs -f kib01
# 直到出现i Kibana has not been configured.字样,说明安装成功,浏览器访问Kibana
http://192.168.10.101:5601/
# 出现配置页面,需要输入最开始ES安装结束输出的信息,Kibana的token
#输入token之后,点击配置,会提示输入确认码,这个确认嘛会打印在刚才监控的Kibana日志中(如图)
# 输入确认码,之后等待配置
# 配置完成会进入登录页面,输入ES的登录名和密码即可登录成功
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 4、安装Logstash:8.15.3(单机部署)
安装好的Es+Kibana是没有测试数据的,可以安装Logstash,使用generator插件来自动生成测试数据
# 下载镜像
docker pull logstash:8.15.3
# 在宿主机设置配置文件,后续挂在到logstash镜像内
vim /opt/elk/logstash.yml
http.host: "0.0.0.0"
xpack.monitoring:
elasticsearch:
hosts: [ "https://es01:9200" ] # es01是宿主机安装es的镜像名称
username: "elastic"
password: "WQsNNkcJBm094DJCa*P8"
ssl:
verification_mode: none
# 编辑配置文件,生成两千万条随机数据
vim /opt/elk/logstash-config.conf
input {
generator {
count => 20000000
}
}
filter {
ruby {
code => '
require "securerandom"
event.set("name", SecureRandom.alphanumeric(10))
start_date = Time.local(2020, 1, 1)
end_date = Time.local(2023, 12, 31)
random_date = Time.at((end_date.to_f - start_date.to_f) * rand + start_date.to_f)
event.set("date", random_date.strftime("%Y-%m-%d"))
event.set("school", SecureRandom.alphanumeric(10))
event.set("age", rand(1..100))
event.set("money", rand * 10000)
event.set("float", rand * 100)
'
}
}
output {
elasticsearch {
hosts => ["https://es01:9200"]
index => "logstash-random-data-20241104"
user => "elastic"
password => "WQsNNkcJBm094DJCa*P8"
ssl => false
ssl_certificate_verification => false
}
}
# 启动logstash,自动跑数据(数据量大,需要等待...)
docker run -d --net elastic --name log -v /opt/elk/logstash-config.conf:/usr/share/logstash/pipeline/logstash.conf -v /opt/elk/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:8.15.3
# 可以持续监控logstash容器日志
docker logs -f log
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
上次更新: 2024/11/07, 21:19:22