ELK 是指 Elasticsearch、Logstash 和 Kibana 这三个开源软件的组合。
Elasticsearch 是一个分布式的搜索和分析引擎,用于日志的存储,搜索,分析,查询。
Logstash 是一个数据收集、转换和传输工具,用于收集过滤和转换数据,然后将其发送到 Elasticsearch 或其他目标存储中。
Kibana 是一个数据可视化平台,通过与 Elasticsearch 的集成,提供了强大的数据分析和仪表盘功能。
docker拉取:
docker pull elasticsearch:8.17.3
docker pull kibana:8.17.3
docker pull logstash:8.17.3
创建目录:
cd /./
mkdir -p /home/elk/elasticsearch/{conf,data,logs,plugins} /home/elk/kibana/conf /home/elk/logstash/{conf,data,pipeline}
chmod 777 /home/elk/elasticsearch/{conf,data} /home/elk/logstash/{conf,data,pipeline}
创建单独docker网络
docker network create elknetwork
修改 Linux 句柄数
#查看当前最大句柄数
sysctl -a | grep vm.max_map_count
#修改句柄数
vi /etc/sysctl.conf
vm.max_map_count=262144
#临时生效,修改后需要重启才能生效,不想重启可以设置临时生效
sysctl -w vm.max_map_count=262144
修改句柄数和最大线程数
#修改后需要重新登录生效
vi /etc/security/limits.conf
# 添加以下内容
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
# 重启服务,-h 立刻重启,默认间隔一段时间才会开始重启
reboot -h now
IK分词器下载
https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.17.3.zip
mkdir -p /home/elk/elasticsearch//plugins/ik/
cd /home/elk/elasticsearch/plugins/ik/
wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.17.3.zip
unzip elasticsearch-analysis-ik-8.17.3.zip
新建docker网络
docker network create elknetwork
创建 docker-compose.yml 文件
version: "3.7"
services:
# elk日志套件(镜像版本最好保持一致)
elasticsearch:
container_name: elasticsearch
image: elasticsearch:8.17.3
restart: on-failure
ports:
- "9200:9200"
- "9300:9300"
environment:
#单节点设置
- discovery.type=single-node
#锁住内存 提高性能
- bootstrap.memory_lock=true
#设置启动内存大小 默认内存/最大内存
- "ES_JAVA_OPTS=-Xms5g -Xmx15g"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
#挂载数据文件
- ./elasticsearch/data:/usr/share/elasticsearch/data
# 挂载配置文件
- ./elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# 挂载IK中文分词器
- ./elasticsearch/plugins/ik:/usr/share/elasticsearch/plugins/ik
networks:
- elknetwork
kibana:
container_name: kibana
image: kibana:8.17.3
depends_on:
- elasticsearch
restart: on-failure
ports:
- "5601:5601"
volumes:
- ./kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
networks:
- elknetwork
logstash:
container_name: logstash
image: logstash:8.17.3
depends_on:
- elasticsearch
restart: on-failure
ports:
- "9600:9600"
- "5044:5044"
volumes:
- ./logstash/data/:/usr/share/logstash/data
- ./logstash/conf/:/usr/share/logstash/conf/
- ./logstash/pipeline:/usr/share/logstash/pipeline
networks:
- elknetwork
#使用自定义的网桥名字
networks:
elknetwork:
external: true
编写elasticsearch配置文件
./conf/elasticsearch.yml
#主机ip
network.host: 0.0.0.0
#network.bind_host: 0.0.0.0
#cluster.routing.allocation.disk.threshold_enabled: false
#node.name: es-master
#node.master: true
#node.data: true
#允许跨域,集群需要设置
http.cors.enabled: true
#跨域设置
http.cors.allow-origin: "*"
#http.port: 9200
#transport.tcp.port: 9300
xpack.security.enabled: false
xpack.security.http.ssl:
enabled: false
xpack.security.transport.ssl:
enabled: false
xpack.monitoring.collection.enabled: true
编写kibana配置文件
./kibana/conf/kibana.yml
server.name: "kibana"
server.host: "0.0.0.0"
# 注意你的本地IP
elasticsearch.hosts: ["http://elasticsearch:9200"]
i18n.locale: "zh-CN"
# 开启xpack监控
monitoring.ui.elasticsearch: true
xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]
xpack.monitoring.collection.interval: 10s
./logstash/conf/logstash.yml
# 允许通过本机所有IP访问
http.host: "0.0.0.0"
# 指定使用管道ID
xpack.management.pipeline.id: ["main"]
./logstash/conf/jvm.options
-Xmx1g
-Xms5g
./logstash/conf/pipelines.yml
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline"
添 微服务应用日志管道配置,在上面指定了管道配置容器目录 /usr/share/logstash/pipeline
, 后面启动 Logstash
时会将其挂载至宿主机目录 ./logstash/pipeline
,接下来只要在宿主机目录下添加管道配置文件 youlai-log.config
就可以被 Logstash
自动加载生效。
./logstash/pipeline/elk-log.config
input {
beats {
port => 5044
client_inactivity_timeout => 36000
}
}
filter {
mutate {
remove_field => ["@version"]
remove_field => ["tags"]
}
}
output {
if [appname] == "gateway" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "gateway-log"
}
}else if [appname] == "auth" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "auth-log"
}
}else if [appname] == "adm" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "adm-log"
}
}else if [appname] == "project" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "project-log"
}
}else if [appname] == "product" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "product-log"
}
}
stdout {}
}
运行
cd /home/elk
docker compose up -d
问题
命令会打印 elastic
用户密码和 Kibana 的注册令牌
docker run --name es01 --net elastic -p 9200:9200 -it -m 6GB -e "xpack.ml.use_auto_machine_memory_percent=true" docker.elastic.co/elasticsearch/elasticsearch:8.17.0
复制生成的 elastic
密码和注册令牌。这些凭据仅在您首次启动 Elasticsearch 时显示。您可以使用以下命令重新生成凭据。
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
重新生成Kibana 启动时,它会向终端输出一个唯一的生成链接。要访问 Kibana,请在 Web 浏览器中打开此链接
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
使用您在启动 Elasticsearch 时生成的密码以 elastic
用户身份登录 Kibana。
要重新生成密码,请运行
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
在生产中使用 Docker 镜像
以下要求和建议适用于在生产环境中在 Docker 中运行 Elasticsearch。
将 vm.max_map_count
设置为至少 262144
对于生产用途,vm.max_map_count
内核设置必须设置为至少 262144
。
如何设置 vm.max_map_count
取决于您的平台。
Linux
要查看 vm.max_map_count
设置的当前值,请运行
grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
要在实时系统上应用设置,请运行
sysctl -w vm.max_map_count=262144
要永久更改 vm.max_map_count
设置的值,请更新 /etc/sysctl.conf
中的值。