Liunx docker安装ELK+filebeat,超详细
本文详细介绍了ELK(Elasticsearch、Logstash、Kibana)与Filebeat的分布式日志监控方案部署流程。针对多服务器环境,使用轻量级Filebeat收集日志,通过Logstash处理后存入Elasticsearch,最终在Kibana展示。主要内容包括:1) Elasticsearch安装配置(含IK分词器);2) Kibana容器化部署及配置;3) Logstash管道
前言:当前所使用的版本是8.17.10,日志监控用elk就好了,为啥还要加个filebeat进来呢,因为多服务器等原因,被迫用了这个方案(当需要收集的日志分布在多个服务器时,就要用到足够轻量的中间件来收集了——filebeat),小弟目前是elk放同一台机子,filebeat放在需要收集日志的机子(微服务应用机子),对了,全部配置都是没有加上密码校验的,如需可以自行查资料对应配置就好了。话不多说,直接来!!!
1、elasticsearch安装
1.1、小弟直接做成了一个独立的文档,直接打开以下的链接跟着操作就好了,包括了IK分词,直接就是一步到位!!!
https://blog.csdn.net/qq_36252295/article/details/125041711
2、kibana安装
docker pull docker.1ms.run/elastic/kibana:8.17.10
2.1、拉取完毕,那么就创建对应的文件夹和文件,在/home下面执行命令
mkdir kibana && cd $_ && mkdir -p config && cd $_
2.2、当前应该是在config目录下了,那么需要创建一个kibana.yml文件,并把以下内容复制进去即可!
touch kibana.yml
注意:修改一下内容里面的es地址,正常是这样的:http://127.0.0.1:9200,按实际替换
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://输入您的内网ip,此处是配置es地址的:9200" ]
2.3、保存好配置文件后,那么就直接执行以下命令创建docker容器了
docker run -d -p 5601:5601 --name kibana --restart=always -v /home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml docker.1ms.run/elastic/kibana:8.17.10
2.4、直接访问:http://ip:5601,进行访问,可以访问就好了,后面会说如何创建数据视图的。注意:如果不能访问,可以使用docker logs kibana进行查看容器启动日志是否正常,如果链接不上es那么要检查配置文件的链接是否正确!!!
3、logstash安装
docker pull docker.1ms.run/elastic/logstash:8.17.10
3.1、拉取完毕,老规矩,先把需要挂载的文件夹和文件先创建好,在/home目录下执行
mkdir logstash && cd $_ && mkdir -p {config,pipeline}
3.2、进去config路径下创建文件夹并把内容复制进行,执行以下命令
touch logstash.yml
注意:要换成您的es访问地址,完整地址:http://127.0.0.1:9200
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://您的内网ip:9200" ]
3.3、进入pipeline文件夹下面创建con文件,并配置对应的处理规则:输入、过滤、输出,以下是一个简单的例子,主要是用来收集java程序的日志。
touch logstash.conf
然后把以下的内容复制进去,并把修改对应的链接信息为您的信息,注意看里面的注释
# 输入
input {
beats {
port => 5044
}
}
# 过滤
filter {
# 请注意这里用的javaLog,filebeat配置里面有用到
if "javaLog" in [tags] {
grok {
match => {
"message" => "^%{TIMESTAMP_ISO8601:log_time} %{LOGLEVEL:log_level} \[%{DATA:thread_name}\] %{DATA:class_name}:%{NUMBER:line_number} - %{GREEDYDATA:log_content}"
}
remove_field => ["message"]
}
# 转换日志时间戳为ES标准格式
date {
match => ["log_time", "yyyy-MM-dd HH:mm:ss,SSS"]
target => "@timestamp"
remove_field => ["log_time"]
}
# 生成索引前缀(按服务拆分)
mutate {
add_field => {
"index_prefix" => "%{app_name}-logs"
}
}
}
}
# 输出
output {
elasticsearch {
# 修改为您的es链接地址
hosts => ["http://127.0.0.1:9200"]
index => "%{index_prefix}-%{+YYYY.MM.dd}"
ssl => false
}
}
3.4、执行以下命令,进行容器的创建,如果需要加更多的应用监控可以在pipeline文件夹下面添加,但是要注意输入的端口,同样要对应映射出来,我们目前仅用到了5044,9600是检查其版本情况等信息。
docker run -d -p 5044:5044 -p 9600:9600 --name logstash --restart=always -v /home/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /home/logstash/pipeline:/usr/share/logstash/pipeline docker.1ms.run/elastic/logstash:8.17.10
3.5、启动完成后可以访问:http://ip:9600,进行版本的查看,启动失败,请使用docker logs logstash查看启动日志,一般都是es的连接问题,好了,正常的话,我们就可以直接使用:http://ip:5044进行日志的输入了。
4、filebeat安装
docker pull docker.1ms.run/elastic/filebeat:8.17.9
4.1、filebeat安装的话,可以安装去其它服务器,然后通过配置logstash进行日志传输,我们在/home下面创建filebeat的配置文件,执行以下命令
mkdir filebeat && cd $_ && mkdir -p config && cd $_
4.2、在/config目录下创建配置文件,然后把内容复制进行
touch filebeat.yml
请注意配置文件里面的注释,需要替换成您实际的信息
需要修改的是:filebeat.inputs里面的配置,其它都基本上不用动,或者您可以根据实际情况配置
id:应用名称
paths:应用对应的日志路径
fields:自定义字段,描述应用
tags:默认是javaLog,您也可以新增自己想要的,这样加了就可以在logstash配置里面获取并进行二次处理
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
# 此处是配置需要收集日志的地址信息等,数组配置
filebeat.inputs:
- type: filestream
id: system-log-input
enabled: true
paths:
- /home/projects/system/logs/ek-system/info.log
- /home/projects/system/logs/ek-system/info.*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
file_identity.path.enable: true
clean_removed: true
fields:
app_name: "system"
log_type: "system-service"
fields_under_root: true
tags: ["javaLog"]
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
output.logstash:
# 这里需要改成您的logstash输入的地址和端口
hosts: ["${LOGSTASH_HOSTS:127.0.0.1:5044}"]
如果您需要监控多个应用,可以在filebeat.inputs下面继续添加,如下:
- type: filestream
id: gateway-log-input
enabled: true
paths:
- /home/projects/gateway/logs/info.log
- /home/projects/gateway/logs/info.*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
file_identity.path.enable: true
clean_removed: true
fields:
app_name: "gateway"
log_type: "gateway-service"
fields_under_root: true
tags: ["javaLog"]
4.3、由于filebeat的配置文件访问权限问题比较严格,所以我们需要修改以下这个文件的权限,执行以下命令
chmod 644 filebeat.yml
4.4、执行以下命令进行docker容器创建,对了,这里有一个点需要注意一下的,就是我们filebeat里面的收集日志的路径也是需要挂载出来的,不然是无法访问到,导致无法收集,您也可以直接挂载根目录就好了。具体的参数是:-v /home/projects/:/home/projects/,这样的话,我们的filebeat容器就能访问到/home/projects/下面的所有文件了
docker run --name filebeat --restart always --privileged=true -v /home/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /home/projects/:/home/projects/ -d docker.1ms.run/elastic/filebeat:8.17.9
4.5、filebeat是不需要端口的,直接查看启动日志查看是否连接logstash成功就好了,docker logs filebeat
5、打开kibana,查看并创建视图
5.1、查看日志在es的索引


5.2、创建日志视图

没有创建过的界面会有一个大大的功能选项:create data view


火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)