一、环境
- 系统版本:Ubuntu
- jdk版本:openjdk11
- Elasticsearch 版本:8.8
- fluentd版本:1.14.3
- kibana版本:8.8.0
二、更新系统依赖源
sudo apt update
sudo apt upgrade -y
三、 jdk安装配置
这里我们使用jdk11,当然你要使用jdk8也是可以的,不过,建议使用 JDK 11,因为它是 Elasticsearch 7.x 的推荐版本。如果你已经有 JDK 8,可以继续使用,但注意可能会遇到一些兼容性问题。
wget https://download.java.net/java/GA/jdk11/openjdk-11_linux-x64_bin.tar.gz
jdk的配置这里就不展开讲了,可以翻一下博主以往的笔记,有详细的配置记录。
配置成功后 ,版本信息:

四、安装 Elasticsearch
Elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch
1. 下载 Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.0-linux-x86_64.tar.gz
2. 解压 Elasticsearch:
tar -xzf elasticsearch-8.8.0-linux-x86_64.tar.gz
3. 配置 Elasticsearch 的配置文件,vi ./elasticsearch-8.8.0/config/elasticsearch.yml
# ======================== Elasticsearch Configuration =========================
# 集群名称
cluster.name: my-application
# 节点名称
node.name: node-1
# 日志存放地址
path.logs: /opt/EFK/elasticsearch-8.8.0/Logs
# 允许所有IP访问
network.host: 0.0.0.0
# HTTP端口号
http.port: 9200
# 启用跨域请求,允许从任何域名访问Elasticsearch API
http.cors.enabled: true
http.cors.allow-origin: "*"
# 启用X-Pack安全功能,确保只有经过身份验证的用户才能访问Elasticsearch集群
xpack.security.enabled: true
# 启用安全注册功能,允许新的节点以安全的方式加入到现有的Elasticsearch集群中
# 新节点会自动获取必要的证书和密钥材料,确保通信的安全性
xpack.security.enrollment.enabled: true
# 启用HTTP接口上的SSL/TLS加密,确保客户端与Elasticsearch之间的所有通信都是加密的
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
# 启用传输层的SSL/TLS加密,确保Elasticsearch节点之间以及客户端与节点之间的内部通信也是加密的
xpack.security.transport.ssl:
enabled: true
# 设置传输层SSL/TLS连接的验证模式,确保节点将验证其他节点提供的证书
verification_mode: certificate
# 指定用于传输层SSL/TLS连接的密钥库文件路径
keystore.path: certs/transport.p12
# 指定用于传输层SSL/TLS连接的信任库文件路径,包含一组受信任的证书
truststore.path: certs/transport.p12
# 初始主节点列表,指定哪些节点可以成为主节点
cluster.initial_master_nodes: ["node-1"]
4. 配置服务内存占用
找到你的jvm.options文件:vi /opt/EFK/elasticsearch-8.8.0/config/jvm.options
打开文件,找到 -Xms 和 -Xmx 设置,将它们都改为 1g:
这意味着分配给 Elasticsearch 的最小和最大内存都是 1GB。
-Xms1g
-Xmx1g
5. 创建系统用于管理 elasticsearch 的用户和组:
elasticsearch 不能使用root用户直接启动。所以一定要配置普通用户。
- (1) 创建一个名为 elasticsearch 的用户组。
sudo groupadd elasticsearch - (2) 创建一个名为 elasticsearch 的系统用户,并将其加入到刚才创建的 elasticsearch 用户组中。
-r 选项表示创建一个系统用户,通常用于系统服务,通常这些用户没有登录权限。
-g elasticsearch 指定新用户所属的用户组为 elasticsearch。
sudo useradd -r -g elasticsearch elasticsearch - (3) 将 /opt/elasticsearch 目录及其所有子文件和目录的所有者和用户组更改为 elasticsearch。
sudo chown -R elasticsearch:elasticsearch /opt/elasticsearch
6. 将 Elasticsearch 注册到systemct,vi /etc/systemd/system/elasticsearch.service
[Unit]
# 描述
Decription=Elasticsearch
# 稳定地址
Documentation=http://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
# 表示该服务在网络在线后启动
Wants=network-online.target
# 确保网络已完全可用,再启动 Elasticsearch。
After=network-online.target
[Service]
# 指定运行该服务的用户
User=elasticsearch
# 指定运行该服务的用户组。
Group=elasticsearch
# 这是启动 Elasticsearch 的命令,指向实际的执行文件路径
ExecStart=/opt/EFK/elasticsearch-8.8.0/bin/elasticsearch
# 指定服务在失败时会自动重启。
Restart=on-failure
# 用于控制服务可以锁定的内存大小
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
7. 重启systemctl 服务
sudo systemctl daemon-reload
sudo systemctl start elasticsearch
sudo systemctl stop elasticsearch
8. 查看是否成功启动

9. 创建 elasticsearch 账户密码
cd /opt/EFK/elasticsearch-8.8.0/bin/
sudo ./elasticsearch-users useradd elastic -p abcd123 -r superuser
- useradd:
添加一个新用户。 - elastic:
要添加的用户的用户名。通常是 Elasticsearch 的内置超级用户。 - -p abcd123:
参数用于指定用户的密码。 - -r superuser:
参数用于指定用户的角色。角色设置为 superuser,这意味着该用户拥有完全访问权限,可以执行所有操作。
如果密码忘记了,可以重置成随机密码
sudo ./elasticsearch-reset-password -u elastic
回车后,输入elastic 密码
sudo ./bin/elasticsearch-reset-password -u elastic -i
10. 访问:9200端口,到这里elasticsearch 就配置结束了
elasticsearch 地址:https://localhost:9200/_cluster/health?pretty

五、Fluentd 安装配置
1. 从 Fluentd 的官方网站或 GitHub 上下载。
wget https://github.com/fluent/fluentd/archive/v1.14.3.tar.gz
2. 解压下载的文件
tar -zxvf fluentd-1.14.3
3. 安装依赖
sudo apt update
sudo apt install -y ruby ruby-dev build-essential
sudo gem install bundler
4. 安装 Fluentd
cd fluentd-1.14.3
sudo gem build fluentd.gemspec
sudo gem install fluentd-*.gem

5. 配置Fluentd 的可执行环境
将 Fluentd 的可执行文件路径添加到用户的环境变量 PATH 中
echo 'export PATH="$PATH:/opt/EFK/fluentd-1.14.3/bin"' >> ~/.bashrc
重新加载 .bashrc 文件,使刚才添加的路径立即生效
source ~/.bashrc
6. 验证安装
fluentd --version

7. 配置 Fluentd 要监控的日志文件
创建或编辑配置文件 fluent.conf,通常放在 /etc/fluent 目录下。可以参考以下示例:
cd /opt/EFK/fluentd-1.14.3
mkdir config
cd ./config
touch fluent.conf
将一下内容写入至 fluent.conf 文件
<system>
# 记录提示信息、警告和错误。
log_level info
# 日志文件存放路径
log /opt/EFK/fluentd-1.14.3/logs/fluentd_service.log
</system>
<source>
@type tail
path /var/log/your_log.log
pos_file /var/log/your_log.log.pos
tag your_log
format none
</source>
<match your_log>
@type elasticsearch
host localhost
port 9200
logstash_format true
scheme https
ssl_verify false
# Elasticsearch的账户
user "elastic"
# Elasticsearch的密码
password "Lq3FDhZ39E2GvnUr3Lw4"
</match>
-
<source> 配置:
- <source>:定义数据的来源。
- @type tail:指定数据来源的类型为 tail,即实时读取文件的末尾数据,类似于 tail -f 命令。
- path /var/log/your_log.log:指定要监控的日志文件的路径。在这里,Fluentd 会读取这个文件的新内容。
- pos_file /var/log/your_log.log.pos:指定一个位置文件,用于记录已读取到文件的哪个位置。这样,当 Fluentd 重启时,可以从上次停止的地方继续读取文件。文件不存在会自动创建,但不能不指定文件名。
- tag your_log:为读取的数据设置一个标签,后续处理时可以使用这个标签来匹配数据。
- format none:指定文件内容的格式,这里设置为 none,表示 Fluentd 将直接读取原始文本。
-
<match> 配置:
- <match your_log>:定义如何处理带有 your_log 标签的数据。
- @type elasticsearch:指定数据的输出类型为 elasticsearch,表示要将数据发送到 Elasticsearch。
- host localhost:指定 Elasticsearch 服务的主机名或 IP 地址,这里使用 localhost 表示 Elasticsearch 运行在同一台机器上。
- port 9200:指定 Elasticsearch 服务的端口,9200 是 Elasticsearch 默认的端口。
- logstash_format true:将数据格式化为 Logstash 格式,这样可以确保与 Elasticsearch 的兼容性。
8. 安装 Elasticsearch 插件:
sudo /opt/EFK/fluentd-1.14.3/bin/fluent-gem install fluent-plugin-elasticsearch
验证插件是否正确安装:
/opt/EFK/fluentd-1.14.3/bin/fluent-gem list | grep elasticsearch

9. 创建服务文件:
创建服务文件:sudo tounch /etc/systemd/system/fluentd.service
编辑服务文件:sudo vi /etc/systemd/system/fluentd.service
[Unit]
Description=Fluentd
After=network.target
[Service]
User=ubuntu
Group=ubuntu
# 以指定配置文件启动fluentd
ExecStart=/opt/EFK/fluentd-1.14.3/bin/fluentd -c /opt/EFK/fluentd-1.14.3/config/fluent.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
重新加载 systemd 配置:sudo systemctl daemon-reload
启动:sudo systemctl start fluentd
停止:sudo systemctl enable fluentd
状态:sudo systemctl status fluentd
10. 启动 Fluentd
-o 将日志文件写入指只当路径
fluentd -c /opt/EFK/fluentd-1.14.3/config/fluentd.conf -o /opt/EFK/fluentd-1.14.3/logs/fluentd_service.log
六、Kiban安装
Kiban 官方文档:https://www.elastic.co/guide/cn/kibana/current/access.html
1. 下载 Kiban :
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.8.0-linux-x86_64.tar.gz
2. 解压
tar -xzf kibana-8.8.0-linux-x86_64.tar.gz
3.修改kibana_system用户密码
通过API的方式修改kibana_system用户的密码
kibana_system 账户是由Elasticsearch服务创建的,是Elasticsearch中的一个内置用户,专门用于Kibana与Elasticsearch之间的通信。

4. 配置Kibana:
vi /opt/EFK/kibana-8.8.0/config/kibana.yml
编辑kibana-8.8.0-linux-x86_64/config/kibana.yml,至少设置以下几项:
# kibana服务端口
server.port: 5601
# 0.0.0.0 表示允许所有请求访问kibana
server.host: "0.0.0.0"
# elasticsearch 服务地址;如果elasticsearch 启用了SSL/TLS协议,那么这里就要用https。
elasticsearch.hosts: ["http://localhost:9200"]
# 当elasticsearch 启用了需要用户名和密码进行身份验证情况下,那么需要配置
# 使用Elasticsearch中创建的kibana_system用户。这个用户是专门用于Kibana与Elasticsearch通信的。
elasticsearch.username: "kibana_system"
elasticsearch.password: "Lq3FDhZ39E2GvnUr3Lw4"
# 配置Kibana信任Elasticsearch的SSL证书;这通常是Elasticsearch的根证书。
elasticsearch.ssl.certificateAuthorities: ["/opt/EFK/elasticsearch-8.8.0/config/certs/http_ca.crt"]
# 设置SSL验证模式,确保Kibana验证Elasticsearch的证书
elasticsearch.ssl.verificationMode: full
5. 启动
/opt/EFK/kibana-8.8.0/bin/kibana

6. 浏览器访问
访问地址:http://localhost:5601/login
-
可以用elastic 的超级用户登录
elastic 用户作为超级用户,拥有所有权限,包括登录 Kibana 界面的权限。这是因为 elastic 用户是 Elasticsearch 的内置超级用户,具有最高的权限级别,可以执行所有操作,包括管理 Kibana。
image.png
七 调试整个EFK堆栈
确保Elasticsearch正在运行并且可以通过9200端口访问。
确认Fluentd能够正常读取日志并将它们发送到Elasticsearch。
如果您安装了Kibana,请确保它能连接到Elasticsearch,并且能够看到由Fluentd发送的日志数据。
安全性:考虑启用Elasticsearch的安全特性,如SSL/TLS加密通信、基本认证等。
性能调优:根据实际负载调整Elasticsearch和Fluentd的资源配置,例如JVM堆大小、Fluentd的缓冲区大小等。
日志轮转:配置日志文件的轮转策略,避免单个日志文件过大影响性能。
