深入理解 ELK 中 Logstash 的底层原理 + 填坑指南(二)

发布于 2022-6-30 16:54
浏览
0收藏

四、Logstash 怎么跑起来的


4.1 Logstash 如何运行的


你会好奇 Logstash 是怎么运行起来的吗?

 

官方提供的启动方式是执行 logstash -f weblog.conf 命令来启动,当执行这个命令的时候其实会调用 Java 命令,以及设置 java 启动参数,然后传入了一个配置文件 weblog.conf 来启动 Logstash。

cd /home/logstash-7.6.2
sudo ./bin/logstash -f weblog.conf

当启动完之后,我们通过命令来看下 Logstash 的运行状态

ps -ef | grep logstash

执行结果如下图所示,可以看到用到了 Java 命令,设置了 JVM 参数,用到了 Logstash 的JAR 包,传入了参数。

深入理解 ELK 中 Logstash 的底层原理 + 填坑指南(二)-开源基础软件社区

 所以建议 Logstash 单独部署到一台服务器上,避免服务器的资源被 Logstash 占用。

 

Logstash 默认的 JVM 配置是 -Xms1g -Xmx1g,表示分配的最小和最大堆内存大小为 1 G。

 

那么这个参数是在哪里配置的呢?全局搜索下 Xms1g,找到是在这个文件里面配置的,config\jvm.options,我们可以修改这里面的 JVM 配置。

 

我们可以调整 Logstash 的 JVM 启动参数,来优化 Logstash 的性能

 

另外 Kibana 上面还可以监控 Logstash 的运行状态(不在本篇讨论范围)。


4.2 Logstash 的架构原理
深入理解 ELK 中 Logstash 的底层原理 + 填坑指南(二)-开源基础软件社区本内容参考这篇 Logstash 架构[5]

 

Logstash 有多个 input,每个 input 都会有自己的 codec。

 

数据会先存放到 Queue 中,Logstash 会把 Queue 中的数据分发到不同的 pipeline 中。

 

然后每一个 pipeline 由 Batcher、filter、output 组成

 

Batcher 的作用是批量地从Queue中取数据。Batcher 可以配置为一次取一百个数据。

 

五、Logstash 宕机风险


5.1 Logstash 单点部署的风险


因为 Logstash 是单点部署到一台服务器上,所以会存在两个风险:

 

 •logstash 突然崩了怎么办?
 •logstash 所在的机器宕机了怎么办?
 •Logstash 所在的机器重启了怎么办?


对于第一个问题,可以安装 Keepalived 软件来保证高可用。另外即使没有安装,当手动启动 Logstash 后,Logstash 也能将未及时同步的日志写入到 ES。

 

对于第二个问题,所在的机器宕机了,那可以通过安装两套 Logstash,通过 keepalived 提供的虚拟 IP 功能,切换流量到另外一个 Logstash。关于如何使用 Keepalived,可以参考之前的 实战 MySQL 高可用架构

 

对于第三个问题,就是把启动 Logstash 的命令放到开机启动脚本中就可以了,但是存在以下问题:

 

 •Ubuntu 18.04 版本是没有开机启动文件的

 Logstash 无法找到 Java 运行环境


接下来我们来看下怎么进行配置开机自启动 Logstash。

 

5.2 开机启动 Logstash


5.2.1 创建自动启动脚本


建立rc-local.service文件

sudo vim /etc/systemd/system/rc-local.service

将下列内容复制进 rc-local.service 文件

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
 
[Install]
WantedBy=multi-user.target

创建文件 rc.local

sudo vim /etc/rc.local

添加启动脚本到启动文件中

#!/bin/sh -e

# 启动 logstash
#nohup /home/software/logstash-7.6.2/bin/logstash -f /home/software/logstash-7.6.2/weblog.conf &

# 启动 filebeat
nohup /home/software/filebeat-7.6.2-linux-x86_64/filebeat -e -c /home/software/filebeat-7.6.2-linux-x86_64/config.yml &

exit 0

5.2.2 修改 Java 运行环境


因在开机启动中,logstash 找不到 java 的运行环境,所以需要手动配置下 logstash。

cd /home/software/logstash-7.6.2/bin/
sudo vim logstash.lib.sh

在 setup_java() 方法的第一行加入 JAVA_HOME 变量,JAVA_HOME 的路径需要根据自己的 java 安装目录来。

JAVA_HOME="/opt/java/jdk1.8.0_181"

 深入理解 ELK 中 Logstash 的底层原理 + 填坑指南(二)-开源基础软件社区

修改 Java 运行环境


5.2.3 权限问题


给 rc.local 加上权限,启用服务

sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
sudo systemctl stop rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

 深入理解 ELK 中 Logstash 的底层原理 + 填坑指南(二)-开源基础软件社区

Logstash 启动成功


然后重启机器,查看 logstash进程是否正在运行,看到一大串 java 运行的命令则表示 logstash 正在运行。

ps -ef | grep logstash

六、总结


本篇讲解了 Logstash 在集群环境下的部署架构图、Logstash 遇到的几大坑、以及 Logstash 的运行机制和架构原理。

 

Logstash 还是非常强大的,有很多功能未在本篇进行讲解,本篇也是抛砖引玉,感兴趣的读者朋友们可以加我好友 passjava 共同探索。

 

标签
已于2022-6-30 16:54:00修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐