Logstash 使用小结


logstash是一个数据分析软件,主要目的是分析log日志。整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层。

首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,它是调用Elasticsearch的接口返回的数据进行可视化。logstash和Elasticsearch是用Java写的,kibana使用node.js框架。
在这里插入图片描述



1)启动和使用logstash

[root@bigdata01 bin]$ ./logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

启动完成后,输入hallo,以及good good study,day day up。
在这里插入图片描述

2)Logstash conf 配置

2.1 input配置

读取文件(File)

1、在 jobconf 目录创建 vi simpleinput_file.conf 文件,输入

input {
    file {
        path => ["/opt/module/logstash-6.6.2/jobdata/message_info"]
        type => "system"
        start_position => "beginning"
	}
}
output{stdout{codec=>rubydebug}}

2、查看message_info 内容为:
在这里插入图片描述
3、启动

启动命令:

[root@bigdata01 jobconf]# ../bin/logstash -f simpleinput_file.conf
[root@bigdata01 jobconf]# ../bin/logstash -f simpleinput_file.conf
Sending Logstash logs to /opt/module/logstash-6.6.2/logs which is now configured via log4j2.properties
[2021-05-26T18:06:27,277][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2021-05-26T18:06:27,301][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.6.2"}
[2021-05-26T18:06:36,460][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2021-05-26T18:06:36,879][INFO ][logstash.inputs.file     ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/opt/module/logstash-6.6.2/data/plugins/inputs/file/.sincedb_bc33e75b09f20ee15b0dd99cb33842e5", :path=>["/opt/module/logstash-6.6.2/jobdata/message_info"]}
[2021-05-26T18:06:36,952][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x5fb8b7b3 run>"}
[2021-05-26T18:06:37,042][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2021-05-26T18:06:37,092][INFO ][filewatch.observingtail  ] START, creating Discoverer, Watch with file and sincedb collections
[2021-05-26T18:06:37,509][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "hadoop",
    "@timestamp" => 2021-05-26T22:06:37.937Z,
      "@version" => "1",
          "host" => "bigdata01"
}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "hdfs",
    "@timestamp" => 2021-05-26T22:06:37.970Z,
      "@version" => "1",
          "host" => "bigdata01"
}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "yarn",
    "@timestamp" => 2021-05-26T22:06:37.970Z,
      "@version" => "1",
          "host" => "bigdata01"
}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "mapreduce",
    "@timestamp" => 2021-05-26T22:06:37.971Z,
      "@version" => "1",
          "host" => "bigdata01"
}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "flume",
    "@timestamp" => 2021-05-26T22:06:37.971Z,
      "@version" => "1",
          "host" => "bigdata01"
}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "zookeeper",
    "@timestamp" => 2021-05-26T22:06:37.971Z,
      "@version" => "1",
          "host" => "bigdata01"
}
{
          "type" => "system",
          "path" => "/opt/module/logstash-6.6.2/jobdata/message_info",
       "message" => "sqoop",
    "@timestamp" => 2021-05-26T22:06:37.971Z,
      "@version" => "1",
          "host" => "bigdata01"
}

重开客户端测试命令:

[root@bigdata01 jobdata]# echo 'hive' >> message_info
[root@bigdata01 jobdata]# echo 'hbase' >> message_info

启动那台客户端监听到如下内容:
在这里插入图片描述
有一些比较有用的配置项,可以用来指定 FileWatch 库的行为:

discover_interval
logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。

exclude
不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。

close_older
一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一小时。

ignore_older
在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是 86400 秒,即一天。

sincedb_path
如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile.sincedb),可以通过这个配置定义 sincedb 文件到其他位置。

sincedb_write_interval
logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。

stat_interval
logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。

start_position
logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 “beginning”,logstash 进程就从头开始读取,类似 less +F 的形式运行。

codec配置(File)

可对数据源进行解析,如解析 json 串

input {
    stdin {
        add_field => {"key" => "value"}
        codec => "json"
        type => "std"
    }
}
output{stdout{codec=>rubydebug}}

2.2 filter配置

Grok插件

input {
    stdin {
        type => "std"
    }
}
filter {
  grok {
    match=>{"message"=> "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}
output{stdout{codec=>rubydebug}}

GeoIP 地址查询归类

input {
    stdin {
        type => "std"
    }
}
filter {
    geoip {
        source => "message"
    }
}
output{stdout{codec=>rubydebug}}

2.3 output配置

保存成文件(File)

input {
    stdin {
        type => "std"
    }
}
output {
    file {
        path => "./logstash-6.6.2/jobdata/%{+yyyy}/%{+MM}/%{+dd}/%{host}.log"
        codec => line { format => "custom format: %{message}"}
    }
}

服务器间传输文件(File)

接收日志服务器配置:

input {
  tcp {
	mode => "server"
	port => 9600
	ssl_enable => false
  }
}
filter {
    json {
        source => "message"
    }
}
output {
    file {
        path => "./logstash-6.6.2/jobdata/%{+YYYY-MM-dd}-%{servip}-%{filename}"
        codec => line { format => "%{message}"}
    }
}

发送日志服务器配置:

input{
    file {
        path => ["./logstash-6.6.2/jobdata/send.log"]
        type => "ecolog"
        start_position => "beginning"
    }
}
filter {
    if [type] =~ /^ecolog/ {
        ruby {
            code => "file_name = event.get('path').split('/')[-1]
					 event.set('file_name',file_name)
					 event.set('servip','接收方ip')"
        }
        mutate {
            rename => {"file_name" => "filename"}
        }
    }
}
output {
	tcp {
        host  => "接收方ip"
        port  => 9600
        codec => json_lines
    }
}

写入ES:

input {
    stdin {
        type => "log2es"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.119.122:9200"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        sniffing => true
        template_overwrite => true
    }
}

sniffing : 寻找其他es节点
template_overwrite: 是否覆盖

实例:将错误日志写入es。

input {
    file {
        path => ["./logstash-6.6.2/jobdata/run_error.log"]
        type => "error"
        start_position => "beginning"
}

}
output {
    elasticsearch {
        hosts => ["192.168.119.122:9200"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        sniffing => true
        template_overwrite => true
    }
}
### 回答1: Logstash 是一个开源的数据处理管道,可以从多种数据源收集数据,并将其转换为所需的格式,最后写入到目标存储中。 如果想使用 Ruby 将 Redis 数据加载到本地内存,可以在 Logstash 中定义一个输入插件和一个过滤插件。输入插件可以从 Redis 读取数据,然后将其作为事件发送到 Logstash 管道。过滤插件则可以对事件进行处理,例如对数据进行格式转换,提取有用的信息等。最后,可以使用输出插件将处理后的数据写入到本地内存中。 下面是一个示例配置: ``` input { redis { host => "redis-host" port => 6379 data_type => "list" key => "logstash" } } filter { ruby { code => "event.set('message', event.get('message').upcase)" } } output { inmem { data_variable => "data_memory" } } ``` 在这个示例中,我们从 Redis 服务器的 "logstash" 键读取数据,并使用 Ruby 过滤插件将消息字段的内容转换为大写。最后,我们使用 inmem 输出插件将处理后的数据存储到了一个名为 "data_memory" 的本地变量中。 ### 回答2: Logstash 是一个开源的数据处理工具,通过使用插件可以实现从不同数据源的数据加载和转换。 在使用 Logstash使用 Ruby 插件将 Redis 数据加载到本地内存时,可以按照以下步骤进行操作: 1. 首先,确保已经安装了 Logstash 和相关的插件。可以使用 gem 命令来安装插件,例如执行 `gem install logstash-input-redis` 来安装 Redis 插件。 2. 在 Logstash 的配置文件中指定 Redis 数据加载的细节。可以创建一个新的配置文件,例如 `redis.conf`,然后在文件中添加以下配置: ``` input { redis { host => "localhost" # Redis 主机地址 port => 6379 # Redis 端口 db => 0 # Redis 数据库索引 data_type => "list" # 数据类型(如队列、哈希等) key => "your_key" # Redis 数据的键名 } } output { stdout { codec => rubydebug # 输出到标准输出,方便查看加载的数据 } } ``` 这样配置中的 `input` 部分指定了从 Redis 获取数据的细节,`output` 部分指定了数据处理完成后的输出方式。 3. 保存配置文件并执行 Logstash 的命令来启动数据加载过程。例如执行 `logstash -f redis.conf` 来通过指定的配置文件启动 Logstash。 4. Logstash 会连接 Redis 数据库,并将数据加载到本地内存中。加载完成后,你可以在标准输出中查看结果,也可以根据需要将数据导出到其他地方进行进一步处理。 通过以上步骤,你就可以使用 Logstash 中的 Ruby 插件将 Redis 数据加载到本地内存了。当然,在实际应用中,还可以根据具体需求进行更复杂的配置和处理。 ### 回答3: Logstash是一个开源的数据收集引擎,可以从多种来源收集、处理和转发数据。其中一个常见的用途是从Redis中加载数据到本地内存。 要使用Logstash将Redis数据加载到本地内存,可以按照以下步骤进行操作: 1. 安装并配置Logstash:首先,需要安装Logstash并进行基本的配置。可以从官方网站下载最新版本,并根据官方文档进行安装和配置。 2. 安装Redis插件:Logstash提供了一个Redis插件,可以用于连接和读取Redis数据。可以使用Logstash的插件管理工具安装Redis插件,或者手动下载并安装插件。 3. 配置Logstash输入:在Logstash的配置文件中,需要指定Redis作为输入源。在输入配置部分,可以设置Redis服务器的地址、端口、密码等信息,以便连接到Redis服务器。还可以指定要加载的Redis数据集、数据类型等。 4. 配置Logstash输出:在Logstash的配置文件中,需要指定本地内存作为输出目标。可以选择将Redis数据直接加载到本地内存,或者存储在中间存储(如Elasticsearch)中进行后续处理和查询。 5. 启动Logstash:完成配置后,可以启动Logstash并开始从Redis加载数据到本地内存。Logstash将连接到Redis服务器,并根据配置的输入和输出进行数据传输和转换。 使用Logstash加载Redis数据到本地内存具有很多优点。例如,可以使用Logstash的过滤器插件对数据进行处理和转换,以满足特定的需求。此外,Logstash还支持高度可扩展和灵活的架构,可以轻松处理大量数据和复杂的数据管道。 总结起来,Logstash是一个功能强大的工具,可以方便地从Redis加载数据到本地内存。通过合理配置和使用Logstash的丰富插件,可以实现灵活、高效和可扩展的数据加载和处理方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值