Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(我们的存储库当然是 Elasticsearch。)

作用:集中、转换和存储数据

官方网站:

https://www.elastic.co/cn/products/logstash

一个民间的中文Logstash最佳实践:

https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/index.html

1.下载Logstash,版本为6.2.4,下载地址

https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz

2.解压到目录

3.启动Logstash进程,Hello World Demo

bin/logstash -e 'input { stdin { } } output { stdout {} }'

bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

输入:Hello World

输出:

在这个Demo中,Hello World作为数据,在线程之间以 事件 的形式流传。不要叫,因为 logstash 可以处理多行事件。

Logstash 会给事件添加一些额外信息。最重要的就是 @timestamp,用来标记事件的发生时间。因为这个字段涉及到 Logstash 的内部流转,所以必须是一个 joda 对象,如果你尝试自己给一个字符串字段重命名为 @timestamp 的话,Logstash 会直接报错。所以,请使用 filters/date 插件 来管理这个特殊字段

此外,大多数时候,还可以见到另外几个:

  1. host 标记事件发生在哪里。
  2. type 标记事件的唯一类型。
  3. tags 标记事件的某方面属性。这是一个数组,一个事件可以有多个标签。

4.语法

Logstash 设计了自己的 DSL —— 有点像 Puppet 的 DSL,或许因为都是用 Ruby 语言写的吧 —— 包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。

区段(section)

Logstash 用 {} 来定义区域。区域内可以包括插件区域定义,你可以在一个区域内定义多个插件。插件区域内则可以定义键值对设置。示例如下:

input {
stdin {}
syslog {}
}

数据类型

Logstash 支持少量的数据值类型:

bool   debug => true
string  host => "hostname"
number port => 514
array match => ["datetime", "UNIX", "ISO8601"]
hash
options => {
key1 => "value1",
key2 => "value2"
}

条件判断(condition)

表达式支持下面这些操作符:
equality, etc: ==, !=, <, >, <=, >=
regexp: =~, !~
inclusion: in, not in
boolean: and, or, nand, xor
unary: !() 比如:
if "_grokparsefailure" not in [tags] {
} else if [status] !~ /^2\d\d/ and [url] == "/noc.gif" {
} else {
}

命令行参数:logstash命令

参数:
执行 -e           bin/logstash -e ''
文件 --config 或 -f    bin/logstash -f agent.conf
测试 --configtest 或 -t 用来测试 Logstash 读取到的配置文件语法是否能正常解析。
日志 --log 或 -l      Logstash 默认输出日志到标准错误。生产环境下你可以通过 bin/logstash -l logs/logstash.log 命令来统一存储日志。

使用Logstash的Kafka插件

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html

启动一个kafka作为输入,并输入1231212

~/software/apache/kafka_2.11-0.10.0.0$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

stdin.conf文件

input{
kafka{
bootstrap_servers => ["127.0.0.1:9092"]
topics => [ 'test' ]
}
}
output {
stdout {
codec => rubydebug
}
}

启动logstash

bin/logstash -f stdin.conf

输出

关于auto_offset_reset参数

由于Kafka是消息队列,消费过的就不会再消费

<i>可以在stdin.conf中设置auto_offset_reset="earliest",比如

input{
kafka{
bootstrap_servers => ["127.0.0.1:9092"]
topics => [ 'test' ]
auto_offset_reset => "earliest"
}
}
output {
stdout {
codec => rubydebug
}
}

在kafka中依次输入

1111
2222
3333

输出为,注意这里timestamp的时间是1111 -> 2222 -> 3333,logstash会从头开始消费没有消费的消息

<ii>当auto_offset_reset="latest"

logstash会从进程启动的时候开始消费消息,之前的消息会丢弃

在kafka中依次输入

1111
2222
3333

输出为

Kafka -> logstash -> Es的conf文件

input{
kafka{
bootstrap_servers => ["127.0.0.1:9092"]
topics => [ 'topicB' ]
auto_offset_reset => "earliest"
consumer_threads => 1
codec => json
}
}
output {
elasticsearch{
hosts => ["127.0.0.1:9200"]
index => "XXX"
}
}

Kafka -> logstash -> File的conf文件

参考

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-file.html

注意:如果是kafka输入是line格式的,使用codec => line { format => "custom format: %{message}"}

关于codec的说明

https://www.elastic.co/guide/en/logstash/6.2/codec-plugins.html

如果kafka输入是json格式的,使用codec => json

input{
kafka{
bootstrap_servers => ["127.0.0.1:9092"]
topics => [ 'topicB' ]
auto_offset_reset => "earliest"
consumer_threads => 1
codec => json
}
}
output {
stdout {
codec => rubydebug {}
}
file {
path => "/home/lintong/桌面/logs/path/to/1.txt"
#codec => line { format => "custom format: %{message}"}
codec => json
}
}

使用Logstash的HDFS插件

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-webhdfs.html

配置文件

input{
kafka{
bootstrap_servers => ["127.0.0.1:9092"]
topics => [ 'topicB' ]
auto_offset_reset => "earliest"
consumer_threads => 1
codec => json
}
}
output {
stdout {
codec => rubydebug {}
}
webhdfs {
host => "127.0.0.1" # (required)
port => 50070 # (optional, default: 50070)
path => "/user/lintong/xxx/logstash/dt=%{+YYYY-MM-dd}/logstash-%{+HH}.log" # (required)
user => "lintong" # (required)
codec => json
}
}

到 http://localhost:50070 下看文件内容

Logstash安装和使用的更多相关文章

  1. ElasticSearch Kibana 和Logstash 安装x-pack记录

    前言 最近用到了ELK的集群,想想还是用使用官方的x-pack的monitor功能对其进行监控,这里先上图看看: 环境如下: 操作系统: window 2012 R2 ELK : elasticsea ...

  2. logstash安装及基础入门

    Logstash是一款开源的数据收集引擎,具备实时管道处理能力.简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合 ElasticSearch以及Kibana,能够极大方便数据的处 ...

  3. Elasticsearch+Kibana+Logstash安装

    安装环境: [root@node- src]# cat /etc/redhat-release CentOS Linux release (Core) 安装之前关闭防火墙 firewalld 和 se ...

  4. Logstash安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)

    前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticsearch-2.4.3的3节点安装(多种方式图文 ...

  5. ElasticStack之Logstash安装

    服务器环境 操作系统 Host:port node 1 CentOS 7.2.1511 11.1.11.127:9200 node1 2 CentOS 7.2.1511 11.1.11.128:920 ...

  6. windows 下 logstash 安装启动

    最新在研究elastic stack (elk)  : logstash 安装,下载最新版本的logstash: 点击打开链接 解压到磁盘根目录下:在logstash>bin 1.目录下创建:l ...

  7. ELK 学习笔记之 Logstash安装

    Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...

  8. Logstash 安装配置使用

    一.Windows下安装运行 官网下载,下载与elasticSearch同一个版本,zip格式.Logstash占用内存较大,我在使用的时候cpu一般都是冲到90% 1.CMD直接运行 创建一个基本的 ...

  9. logstash 安装 配置

    1.Logstash 安装:在产生日志的服务器上安装 Logstash1.安装java环境 # yum install java-1.8.0-openjdk.x86_642.安装logstash(使用 ...

  10. Logstash 安装与配置

    一.Logstash 描述 简单而又强大的数据抽取与处理工具,相比于flums一整本书的描述强大而又好用. 还记得我13年用python写了一个数据抽取.校验工具,设计思路也同样是拆解处理过程模板,然 ...

随机推荐

  1. LeetCode Weekly Contest 32

    581. Shortest Unsorted Continuous Subarray Given an integer array, you need to find one continuous s ...

  2. 区间dp板子题:[noi1995]石子合并

    非常经典的区间dp模板 对于每一个大于二的区间 我们显然都可以将它拆分成两个子序列 那么分别计算对于每个取最优值即可 #pragma GCC optimize("O2") #inc ...

  3. 部署前准备--使用Mysql之Django Debug Toolbar安装以及配置

    python -c "import django ;print(django.__path__);" 查看python的全局配置 vi /usr/local/lib/python3 ...

  4. mount 命令用法

    mount 功能: 加载指定的文件系 统:mount可将指定设备中指定的文件系统加载到 Linux目录下(也就是装载点).可将经常使用的设备写入文件/etc/fastab,以使系 统在每次启动时自动加 ...

  5. .Net转Java.04.踩到switch的坑

    今天线上有个NullPointerException 的异常,我翻了一下代码,抛异常的竟然是switch语句 我有种不祥的预感,本地做了实验 结果是 Java的switch如果传入null值,会抛出  ...

  6. 卷积的三种模式:full, same, valid

    通常用外部api进行卷积的时候,会面临mode选择. 本文清晰展示三种模式的不同之处,其实这三种不同模式是对卷积核移动范围的不同限制. 设 image的大小是7x7,filter的大小是3x3 1,f ...

  7. 【jQuery:遍历同样class的全部值,遍历某一列td的值】

    jsp代码: Html代码 <c:forEach var="main" items="${mainPage.list }"> <tr> ...

  8. ionic android升级检查

    https://www.cnblogs.com/zxj159/p/4421578.html 坑: 放到cordova.file.DataDirectory下载异常? 只好cordova.file.ex ...

  9. 解决 安装VMwanre tools时 Enter the path to the kernel header files for the 3.10.0-862.14.4.el7.x86_64 kernel

    1.使用ctrl+z停止安装vmtools安装 2.然后yum升级kernel-devel yum -y install kernel-devel

  10. Eclipse和MyEclipse使用技巧--解决MyEclipse中的js报错的小方法

    今天,下了个模版,但是导进去的时候发现js会报错.看了下其他都没有错误.而有一个js报错误,请原谅我有点红色强迫症,不能留一点红色 . 错误如下:Syntax error on token " ...