ELK是什么?了解elk
"ELK" 是 Elasticsearch、Logstash 和 Kibana 三个开源软件的首字母缩写。这三个软件一起常被称为 "ELK Stack" 或 "Elastic Stack"。它们主要用于日志管理和分析,提供了强大的数据搜索、分析和可视化功能。
- Elasticsearch:一个分布式搜索和分析引擎,能够实时处理大数据量,提供强大的全文搜索功能。
- Logstash:一个数据收集引擎,可以从各种来源收集数据,进行过滤和转换,然后将数据发送到存储库(如 Elasticsearch)。
- Kibana:一个数据可视化平台,允许用户通过图表和图形查看和分析存储在 Elasticsearch 中的数据。
这些工具组合在一起,为用户提供了一个强大的平台,用于实时搜索、分析和可视化日志数据。
每个工具都是单独存在的而不会互相影响,在实际使用中,需要将三者分别运行,并打通整个流程。
名词介绍:
elastic中的索引:是一个逻辑命名空间,包含一组相关的文档,类似于传统关系型数据库中的数据库。
es中的文档:是 Elasticsearch 中存储的基本数据单元,表示一条记录或一项数据,类似于数据库中的一行。
字段(Field):文档由若干字段组成,每个字段有一个字段名和字段值,字段值可以是多种类型,如字符串、数字、日期等。
详细来说:
整个日志的收集流程为:先通过logstash(或其他工具代替收集数据,例如轻量级的filebeat,可以适用于大多数情况,也可根据实际情况可以选择不同的收集工具), 收集多种不同格式的数据,并转换成es可以分辨的格式(如json)存入es中指定的索引中,然后通过kibana就可以查看es中收到的数据。
具体实现(我的配置是linux服务器宝塔操作,项目运行时日志是存放在txt文件中,搭建elk(没有用l而是filebeat)在同一台服务器上对项目日志进行查看):
首先进行软件的安装:
shell
docker pull elasticsearch:7.12.0
docker pull kibana:7.12.0
docker pull logstash:7.12.0
一定要注意,软件版本要统一;(也可以使用wget命令下载我用的是fliebeat)
然后使用docker images查看镜像是否拉取成功;
第三步:创建一个容器网络:(使在不同容器中的应用可以通过容器网络互相通信)
shell
docker network create elk_network
前置工作结束:
elastic
开始启动软件:
启动es
shell
docker run -itd --name elasticsearch --net elk_network -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx512m" elasticsearch:7.12.0
复制容器镜像文件(用于文件映射)
shell
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /home/elasticsearch/config/elasticsearch.yml
docker cp elasticsearch:/usr/share/elasticsearch/plugins /home/elasticsearch/plugins
docker cp elasticsearch:/usr/share/elasticsearch/data /home/elasticsearch/data
docker cp elasticsearch:/usr/share/elasticsearch/logs /home/elasticsearch/logs
不知道docker中文件映射是什么意思的可以去了解一下,不使用而直接去指定镜像中修改配置文件也是可以的(演示中并没有使用)
若使用的是宝塔,可以直接在docker中进入镜像目录对原文件进行修改:
修改elasticsearch.yml的配置:文件中加上:
yml
xpack.security.enabled: true
xpack.security.audit.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
重启es
然后在elasticsearch/bin目录下打开终端,运行:
shell
./elasticsearch-setup-passwords interactive
会进入初始化密码:请记住自己设置的密码
kibana
首先启动kibana
shell
docker run -d --name kibana --net elk_network -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://[elasticsearch启动ip地址]:9200" kibana:7.12.0
ip地址填写自己服务器的地址。
shell
docker cp kibana:/usr/share/kibana/config/kibana.yml /home/kibana/config/kibana.yml
复制镜像用于文件映射或直接进入配置文件中修改
修改配置文件信息:
elasticsearch.username: "elastic"
elasticsearch.password: [es密码]
重启kibana
下载filebeat
直接使用wget下载:
shell
# 进入文件夹
cd /opt/elk/
# 下载
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.8.1-linux-x86_64.tar.gz
# 解压文件
tar -zxvf filebeat-8.8.1-linux-x86_64.tar.gz
# 重命名
mv filebeat-8.8.1-linux-x86_64 filebeat
进入到filebeat目录下,创建对应的配置文件
filebeat配置文件默认在etc/filebeat文件夹下:
进入:filebeat.yml修改配置文件:
我的这个项目是将日志存放在项目下文件夹中,所以需要指定文件位置为:
filebeat.inputs:
- type: filestream
id: my-filestream-id
enabled: true
paths:
- /www/wwwroot/campus_forum/logs/*.log
index: "campus"
配置filebeat模版的路径和重新加载设置:
filebeat.inputs:
- type: filestream
id: my-filestream-id
enabled: true
paths:
- /www/wwwroot/campus_forum/logs/*.log
index: "campus"
配置输出到elastic的设置
output.elasticsearch:
hosts: ["localhost:9200"]
username: "elastic"
password: "123456"
配置处理器:(不能多打空格)
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
- decode_json_fields:
fields: ["message"]
target: ""
overwrite_keys: true
配置完成后保存退出。
启动filebeat:
sh
sudo systemctl start filebeat
检查filebeat状态:
sh
sudo systemctl status filebeat
确保 Filebeat 在系统重启后自动启动:
sh
sudo systemctl enable filebeat
万无一失后启动项目,启动elk的各个软件
查看ip+9200端口和ip+5601端口信息
(默认为非汉化,需要修改配置文件为汉化)
进入后点击右侧最下方进入创建索引并点击索引模式对索引进行修改(默认的会加入很多用不到的字段,需要对其进行隐藏)
点击字段筛选,使用通配符屏蔽
完成后点击左侧discover并选择相应的索引,就可以看到文件中的日志了,
查看和查询都非常方便。