ELK(Elasticsearch+Logstash+Kibana)中我们使用过Elasticsearch和Kibana,就剩下最后一个LogStash了。
官方文字说明:Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。 通俗说明:Logstash是一款强大的数据处理工具,常用作日志处理。
通常当系统发生故障时,工程师需要登录到各个服务器上,使用 grep / sed / awk 等 Linux 脚本工具去日志里查找故障原因。在没有日志系统的情况下,首先需要定位处理请求的服务器,如果这台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志压缩归档策略等。
这样一系列流程下来,对于我们排查故障以及及时找到故障原因,造成了比较大的麻烦。因此,如果我们能把这些日志集中管理,并提供集中检索功能,不仅可以提高诊断的效率,同时对系统情况有个全面的理解,避免事后救火的被动。
所以日志集中管理功能就可以使用ELK技术栈进行实现。Elasticsearch只有数据存储和分析的能力,Kibana就是可视化管理平台。还缺少数据收集和整理的角色,这个功能就是Logstash负责的。
Logstash 支持的数据源有很多。例如对于日志功能来说只能能有日志记录和日志传递功能的日志都支持,Spring Boot中默认推荐logback支持日志输出功能(输出到数据库、数据出到文件)。 我们就使用logback进行日志输出给Logstash。
整个整体就是Logstash的功能。 在Logstash中包含非常重要的三个功能: a)Input 输入源,一般配置为自己监听的主机及端口。DataSource向指定的ip及端口输出日志,Input 输入源监听到数据信息就可以进行收集。 b)Filter 过滤功能,对收集到的信息进行过滤(额外处理),也可以省略这个配置(不做处理) c)Output 把收集到的信息发送给谁。在ELK技术栈中都是输出给Elasticsearch,后面数据检索和数据分析的过程就给Elasticsearch了。
最终效果:通过整体步骤就可以把原来一行日志信息转换为Elasticsearch支持的Document形式(键值对形式)的数据进行存储。
docker pull logstash:6.8.4
docker run -it -p 4560:4560 --name logstash -d logstash:6.8.4
进入容器
docker exec -it logstash /bin/bash
修改配置文件
vi /usr/share/logstash/config/logstash.yml
把ip修改成elasticsearch访问地址IP
继续在容器命令行输入
以下这个配置就是定义输入输出的目的地
vi /usr/share/logstash/pipeline/logstash.conf
删除原始的配置
配置解释说明:
input:接收日志输入配置
tcp: 协议
mode: logstash服务
port:端口,自己指定。默认4560
output:日志处理输出
elasticsearch: 交给es处理
action:es中index命令。也就是新增命令。
hosts:es的主机
index:存储日志的索引。如果不存在可以自动创建。默认的type名称为doc
一定要先启动编辑状态(点击键盘i键)在粘贴,如果没启用第一行是nput{少个i。
input {
tcp {
mode => "server"
port => 4560 意思是用4560端口向logstash输入东西
}
}
filter {
}
output {
elasticsearch {
action => "index" 行为
hosts => "192.168.8.142:9200"
index => "test_log"
}
}
退出容器命令行,进入到Linux终端,重启logstash容器。
docker restart logstash
docker logs -f logstash
以上就是启动成功