企业级logstash简单使用(ELK)
企业级logstash简单使用(ELK)
要使用logstash收集到Elasticsearch的方式,需确保logstash版本与es版本一致。
由于我也是刚刚研究使用,所以本文暂不会出现原理性的东西。
Logstash
介绍
Logstash是具有实时流水线能力的开源的数据收集引擎。Logstash可以动态统一不同来源的数据,并将数据标准化到您选择的目标输出。它提供了大量插件,可帮助我们解析,丰富,转换和缓冲任何类型的数据。
inputs(输入阶段)
会生成事件。包括:file、kafka、beats等
filters(过滤器阶段)
可以将过滤器和条件语句结合使用对事件进行处理。包括:grok、mutate等
outputs(输出阶段)
将事件数据发送到特定的目的地,完成了所以输出处理,改事件就完成了执行。如:elasticsearch、file等
使用方式
下载地址 :https://www.elastic.co/fr/downloads/logstash
下载之后随便解压到某个目录,会得到以下这些目录和文件,我们需要注意的就三个目录,bin、config、logs,下面一个一个说。
先来看config文件夹,进入后会有这几个文件:

查看logstash-sample.conf配置文件
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
#输入插件beats,轻量化
beats {
#监听端口
port => 5044
}
}
output {
#es连接地址及索引配置
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
下来稍微修改一下,我们启动试试。
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
#添加file插件
file {
#测试环境中我们一般是nohup后台启动jar包,默认日志追加到nohup文件中,这里我们用插件读取这个日志发送到es上试试
path => "/home/mm/mmm/nohup.out"
mode => "read"
}
}
output {
elasticsearch {
#配置自己的es连接,这里是使用es默认模板
hosts => ["http://localhost:9200"]
index => "ceshi"
#user => "elastic"
#password => "changeme"
}
}
退回到bin目录下,启动
./logstash -f /自己路径下的配置文件/logstash/config/logstash-sample.conf

这样子就是启动成功了。
下面就是我们收集到的日志,大家可以看看默认都有什么字段。
{
"_index" : "console-analysis",
"_type" : "_doc",
"_id" : "_DDNH4kBVvgVIOGHRiop",
"_score" : 1.0,
"_source" : {
"port" : 57910,
"thread_name" : "main",
"host" : "172.17.0.5",
"logger_name" : "com.alibaba.nacos.client.naming",
"@version" : "1",
"level_value" : 20000,
"message" : "[BEAT] adding beat: BeatInfo{port=17007, ip='192.168.1.59', weight=1.0, serviceName='DEFAULT_GROUP@@amcp-analysis', cluster='DEFAULT', metadata={preserved.register.source=SPRING_CLOUD}, scheduled=false, period=5000, stopped=false} to beat map.",
"level" : "INFO",
"logHost" : "192.168.1.59:5044",
"appname" : "analysis"
}
Springboot集成logstash+elasticsearch
加入依赖
<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.1.1</version>
</dependency>
配置
在resources目录下创建一个logback-spring.xml的xml文件。
如果是使用nacos来获取配置的话,文件名字不能是logback-spring.xml,因为会导致logback-spring.xml文件被加载两次,这样在logback-spring.xml文件中如果想读取nacos上的配置的话是拿不到的。
在yml或者properties文件中添加配置
logging:
config: classpath:logback-nacos.xml
logstash:
host: localhost:5044
logback-spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 获取配置中的值 -->
<springProperty scope="context" name="logHost" source="logstash.host"/>
<!-- 添加logstash连接配置 -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${logHost}</destination> <!-- Logstash的主机和端口,可以配置多个 -->
<!-- 其他属性 -->
<connectionTimeout>5000</connectionTimeout>
<reconnectionDelay>5000</reconnectionDelay>
<encoder charset="UTF-8"
class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 自定义字段,这里我是用来区分收集的是哪个程序的日志,后面logstash配置我们可以看下它的作用 -->
<customFields>{"appname":"analysis"}</customFields>
</encoder>
</appender>
<!-- 控制台输出配置,不添加的话日志不会在控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{36} : %msg%n</pattern>
</encoder>
</appender>
<!-- level设置收集日志级别,可以配置多个appender,这个配置文件中也可以直接添加filter过滤标签,这个大家自己尝试一下 -->
<root level="info">
<appender-ref ref="console" /> <!-- 添加控制台appender -->
<appender-ref ref="logstash" />
</root>
</configuration>
logstash配置
logstash-sample.conf配置文件
input {
#配置监听端口,也就是destination
tcp {
mode => "server"
host => "localhost"
port => 5044
codec => json_lines
}
}
filter {
#判断appname,在配置中声明一个变量,不同的appname赋予不同的值,这里其实就是根据我自定义的字段来给不同的es索引名称
if [appname] == "analysis"{
mutate {
add_field => {
"[@metadata][index]" => "console-analysis"
}
}
}
#判断日志级别,收集到的日志默认字段level会记录日志级别,这个时候我们可以根据需要对日志进行操作。下面这个操作是将日志级别,日志记录到自定义字段,以及将记录的时间进行转换记录到time字段,默认记录的时间是带时区的
if [level] =~ /DEBUG/ {
mutate {
add_field => {
"type" => "DEBUG"
"details" => "%{message}"
}
}
ruby {
code => "
event.set('time', event.timestamp.time.localtime.strftime('%Y-%m-%d %H:%M:%S'))
"
}
mutate {
remove_field => ["[@timestamp]"]
}
}
}
output {
#这里判断message字段中如果不包含HiddenHorzOCR就记录,只是演示一下这里面也可以进行逻辑判断
if !([message] =~ /HiddenHorzOCR/) {
if [@metadata][index] {
elasticsearch {
hosts => ["http://192.168.1.59:9200"]
#这个索引就是我们在filter中判断appname时赋的值
index => "%{[@metadata][index]}"
#指定es要使用的模板,也可以使用默认的
template => "/home/collect.json"
#模板名称
template_name => "collect"
#加载模板是否覆盖之前的模板
template_overwrite => true
}
}
}
}
es模板
{
"index_patterns": ["console*"],
"settings": {
"number_of_shards": 5,
"max_result_window": "500000000"
},
"mappings": {
//自定义几个字段
"properties": {
"type": { "type": "keyword" },
"details": { "type": "text" },
"time": {
"type": "keyword"
}
}
}
}
所有配置添加完成之后,启动logstash和自己的应用程序,这个时候就可以上es或者kibana上查看创建出的索引以及收集到的日志。
这是指定模板后收集到的日志。
{
"_index" : "console-analysis",
"_type" : "_doc",
"_id" : "_jDNH4kBVvgVIOGHRiop",
"_score" : 1.0,
"_source" : {
"port" : 57910,
"details" : "Scanning for api listing references",
"type" : "INFO",
"time" : "2023-07-04 15:28:13",
"thread_name" : "main",
"host" : "172.17.0.5",
"logger_name" : "springfox.documentation.spring.web.scanners.ApiListingReferenceScanner",
"@version" : "1",
"level_value" : 20000,
"message" : "Scanning for api listing references",
"level" : "INFO",
"logHost" : "192.168.1.59:5044",
"appname" : "analysis"
}
}
企业级logstash简单使用(ELK)的更多相关文章
- ELK系列四:Logstash的在ELK架构中的使用和简单的输入
1.ELK架构中Logstash的位置: 1.1.小规模集群部署(学习者适用的架构) 简单的只有Logstash.Elasticsearch.Kibana,由Logstash收集日志或者流量信息,过滤 ...
- filebeat -> logstash -> elasticsearch -> kibana ELK 日志收集搭建
Filebeat 安装参考 http://blog.csdn.net/kk185800961/article/details/54579376 elasticsearch 安装参考http://blo ...
- 企业级中带你ELK如何实时收集分析Mysql慢查询日志
什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...
- Logstash:使用ELK堆栈进行API分析
- 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载
原文地址:https://wsgzao.github.io/post/elk/ 另外可以参考:https://www.digitalocean.com/community/tutorials/how- ...
- ELK初学搭建(logstash)
ELK初学搭建(logstash) elasticsearch logstash kibana ELK初学搭建 logstash 1.环境准备 centos6.8_64 mini IP:192.168 ...
- ELK(elasticsearch+kibana+logstash)搜索引擎(一): 环境搭建
1.ELK简介 这里简单介绍一下elk架构中的各个组件,关于elk的详细介绍的请自行百度 Elasticsearch是个开源分布式搜索引擎,是整个ELK架构的核心 Logstash可以对数据进行收集. ...
- ELK搭建实时日志分析平台之二Logstash和Kibana搭建
本文书接前回<ELK搭建实时日志分析平台之一ElasticSearch> 文:铁乐与猫 四.安装Logstash logstash是一个数据分析软件,主要目的是分析log日志. 1)下载和 ...
- Windows环境下ELK简单搭建记录
前言 ELK已经是一套成熟的日志解决方案,虽然出现了好久,今日才终于研究了一下,不过是在windows平台上安装的. 搭建步骤 下载软件 安装软件 修改配置文件 启动软件 集成测试 下载软件 首先从官 ...
- ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例
前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开 ...
随机推荐
- 请求被中止: 未能创建 SSL/TLS 安全通道 解决方案
最近项目改造https,有部分请求出现"请求被中止: 未能创建 SSL/TLS 安全通道". 原因应该是,接口方变更了安全协议,而客户端并未启用该协议. 解决办法自然就是:让客户端 ...
- Java Stream常见用法汇总,开发效率大幅提升
本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...
- Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本操作和语句
配置文件介绍 SECRET_KEY = '0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a' # 盐 DEBUG = True # 调试模式 ...
- 音视频八股文(7)-- 音频aac adts
AAC介绍 AAC(Advanced Audio Coding)是一种现代的音频编码技术,用于数字音频的传输和存储领域.AAC是MPEG-2和MPEG-4标准中的一部分,可提供更高质量的音频数据,并且 ...
- 2022-09-23:整数数组 stations 表示 水平数轴 上各个加油站的位置。给你一个整数 k 。 请你在数轴上增设 k 个加油站, 新增加油站可以位于 水平数轴 上的任意位置,而不必放在整数
2022-09-23:整数数组 stations 表示 水平数轴 上各个加油站的位置.给你一个整数 k . 请你在数轴上增设 k 个加油站, 新增加油站可以位于 水平数轴 上的任意位置,而不必放在整数 ...
- ArcGIS如何自动获得随机采样点?
本文介绍基于ArcMap软件,实现在指定区域自动生成随机点的方法. 在GIS应用中,我们时常需要在研究区域内进行地理数据的随机采样:而采样点的位置往往需要在结合实际情况的前提下,用计算机随机生 ...
- 顶会ICSE-2023发布LIBRO技术,利用大模型技术进行缺陷重现,自动重现率达33%
摘要:本文围绕LIBRO技术的主要步骤进行介绍. 本文分享自华为云社区<[LLM for SE]顶会ICSE-2023发布LIBRO技术,利用大模型技术进行缺陷重现,自动重现率(33%)实现业界 ...
- 大三ACM第一次开会
现在是2020.9.12,单说时间的话可能感知不太强,那么换个时间, 现在是大三上.按照设想,我应该已经退役. 会上,老李的语气不再激昂,满含着无奈与沧桑.面对围在桌前的大三们,终究还是提出了那个问题 ...
- XTU OJ 程设训练 1407 Alice and Bob
题目描述 Alice和Bob打球,已知他们打过的每一回合的输赢情况,每个回合获胜的一方可以得一分. Alice可以随意设定赢得一局比赛所需的分数和赢得整个比赛所需要的局数. Alice想赢得比赛,请问 ...
- Golang扫盲式学习——GO并发 | (一)
并发与并行 并发与并行的概念和区别 并行:同一个时间段内多个任务同时在不同的CPU核心上执行.强调同一时刻多个任务之间的"同时执行". 并发:同一个时间段内多个任务都在进展.强调多 ...