Logstash安装和使用
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 插件 来管理这个特殊字段。
此外,大多数时候,还可以见到另外几个:
- host 标记事件发生在哪里。
- type 标记事件的唯一类型。
- 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安装和使用的更多相关文章
- ElasticSearch Kibana 和Logstash 安装x-pack记录
前言 最近用到了ELK的集群,想想还是用使用官方的x-pack的monitor功能对其进行监控,这里先上图看看: 环境如下: 操作系统: window 2012 R2 ELK : elasticsea ...
- logstash安装及基础入门
Logstash是一款开源的数据收集引擎,具备实时管道处理能力.简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合 ElasticSearch以及Kibana,能够极大方便数据的处 ...
- Elasticsearch+Kibana+Logstash安装
安装环境: [root@node- src]# cat /etc/redhat-release CentOS Linux release (Core) 安装之前关闭防火墙 firewalld 和 se ...
- Logstash安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)
前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticsearch-2.4.3的3节点安装(多种方式图文 ...
- 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 ...
- windows 下 logstash 安装启动
最新在研究elastic stack (elk) : logstash 安装,下载最新版本的logstash: 点击打开链接 解压到磁盘根目录下:在logstash>bin 1.目录下创建:l ...
- ELK 学习笔记之 Logstash安装
Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...
- Logstash 安装配置使用
一.Windows下安装运行 官网下载,下载与elasticSearch同一个版本,zip格式.Logstash占用内存较大,我在使用的时候cpu一般都是冲到90% 1.CMD直接运行 创建一个基本的 ...
- logstash 安装 配置
1.Logstash 安装:在产生日志的服务器上安装 Logstash1.安装java环境 # yum install java-1.8.0-openjdk.x86_642.安装logstash(使用 ...
- Logstash 安装与配置
一.Logstash 描述 简单而又强大的数据抽取与处理工具,相比于flums一整本书的描述强大而又好用. 还记得我13年用python写了一个数据抽取.校验工具,设计思路也同样是拆解处理过程模板,然 ...
随机推荐
- Module not found: Error: Can't resolve 'XXX' in 'XXXX'
故障 控制台运行webpack/npm时出现 Module not found: Error: Can't resolve 'XXX' in 'XXXX' 解决方案 npm i XXX --save ...
- [P3957][NOIP2017]跳房子 (DP+二分/队列?)
看到GREED_VI大佬在打这题 我这个蒟蒻偷偷看一眼洛谷上目前普及难度里最难的一题 题目还是能看懂的,不想道路游戏那题,我完全不知道题目是什么意思…… GREED_VI大佬第一次用的是二分的思想,于 ...
- python网络编程(六)
tcp通信模型 tcp服务器 在程序中,如果想要完成一个tcp服务器的功能,需要的流程如下: socket创建一个套接字 bind绑定ip和port listen使套接字变为可以被动链接 accept ...
- ES6 迭代器和生成器
设计为了更高效的数据处理,避免过多for循环嵌套(代码复杂度,跟踪多个循环变量) 1. 迭代器: 为迭代过程设计的接口 所有的迭代器对象都有next()方法,每次调用都返回一个结果对象,对象有两个属性 ...
- ./configure && make && make install 编译安装和卸载 (Linux)
./configure && make && make install 编译安装和卸载 (Linux) 正常的编译安装/卸载: 源码的安装一般由3个步骤组成:配置( ...
- 【容斥】Four-tuples @山东省第九届省赛 F
时间限制: 10 Sec 内存限制: 128 MB 题目描述 Given l1,r1,l2,r2,l3,r3,l4,r4, please count the number of four-tuples ...
- WPF 实现窗体拖动
C# 实现代码 this.Loaded += (r, s) => { this.MouseDown += (x, y) => { if (y.LeftButton == MouseButt ...
- 全栈JavaScript之路(十九)HTML5 插入 html标记 ( 一 )innerHTML 与outerHTML
在须要给文档插入大量的html 标记下.通过DOM操作非常麻烦,你不仅要创建一系列的节点,并且还要小心地依照顺序把它们接结起来. 利用html 标签 插入技术,能够直接插入html代码字符串,简单.高 ...
- 关于bazel使用笔记
当我们在build一个文件时,需要另外的放置cache时,我们需要: bazel --output_user_root=/path/to/directory build //foo:bar
- SNF框架及机器人2018年1-9月份升级内容
1月 增加评星控件.年月选择控件 完善表格弹框的封装,增加多选弹框 的封装 增加表格 单元格合并.列头必填与可填写的标识 4月 关于分页查询和排序的各种修改(扶额) 导入excel优化 bs计算合计的 ...