Logstash__基础知识

2019-11-23  本文已影响0人  互联网中的一个咸鱼

摘自

1、安装

建议直接从ela官网安装
安装链接
这里我用的是yum安装

下载并安装公共密钥:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

例如,将以下内容添加到/etc/yum.repos.d/目录中的带.repo后缀的文件中logstash.repo

[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装

sudo yum install logstash

2、使用简单的logstash示例

进入logstash容器,默认是logstash用户,如何进入root用户?

exec进入容器并切换用户的命令

docker exec -it --user root logstash bash

在终端中,像下面这样运行命令来启动 Logstash 进程:

# logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
结果
{
       "message" => "Hello World",
      "@version" => "1",
    "@timestamp" => "2014-08-07T10:30:59.937Z",
          "host" => "raochenlindeMacBook-Air.local",
}

解释

Logstash 就像管道符一样!

你输入(就像命令行的 cat )数据,然后处理过滤(就像 awk 或者 uniq 之类)数据,最后输出(就像 tee )到其他地方。

当然实际上,Logstash 是用不同的线程来实现这些的。如果你运行 top 命令然后按下 H 键,你就可以看到下面这样的输出:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                          
21401 root      16   0 1249m 303m  10m S 18.6  0.2 866:25.46 |worker                           
21467 root      15   0 1249m 303m  10m S  3.7  0.2 129:25.59 >elasticsearch.                   
21468 root      15   0 1249m 303m  10m S  3.7  0.2 128:53.39 >elasticsearch.                   
21400 root      15   0 1249m 303m  10m S  2.7  0.2 108:35.80 <file                             
21403 root      15   0 1249m 303m  10m S  1.3  0.2  49:31.89 >output                           
21470 root      15   0 1249m 303m  10m S  1.0  0.2  56:24.24 >elasticsearch.

小贴士:logstash 很温馨的给每个线程都取了名字,输入的叫xx,过滤的叫|xx

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

小贴士:每个 logstash 过滤插件,都会有四个方法叫 add_tag, remove_tag, add_fieldremove_field。它们在插件过滤匹配成功时生效。

remove_field是使用频次最多的

logstash长期运行

完成上一节的初次运行后,你肯定会发现一点:一旦你按下 Ctrl+C,停下标准输入输出,logstash 进程也就随之停止了。作为一个肯定要长期运行的程序,应该怎么处理呢?

这里介绍的是以守护进程方式运行
对于需要长期后台运行的大量程序(注意大量,如果就一个进程,还是学习一下怎么写 init 脚本吧),推荐大家使用一款 daemontools 工具。

daemontools 是一个软件名称,不过配置略复杂。所以这里我其实是用其名称来指代整个同类产品,包括但不限于 python 实现的 supervisord,perl 实现的 ubic,ruby 实现的 god 等。

安装

yum -y install python-setuptools
easy_install supervisor
supervisord -v  # 默认安装最新版本

生成默认的配置文件

echo_supervisord_conf > /etc/supervisord.conf

继续编写配置文件

[program:elkpro_1]
environment=LS_HEAP_SIZE=5000m
#directory=/usr/share/logstash/bin/logstash
command=logstash -f /usr/share/logstash/pipeline/logstash.conf
# 这是要启动的程序

启动程序

supervisord -c /etc/supervisord.conf

查看程序启动的情况

supervisorctl

logstash 会以 supervisord 子进程的身份运行,你还可以使用 supervisorctl 命令,单独控制一系列 logstash 子进程中某一个进程的启停操作:

supervisorctl stop elkpro_1

logstash的配置语法

区段

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

input {
    stdin {}
    syslog {}
}
数据类型

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

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

注意:如果你用的版本低于 1.2.0,哈希的语法跟数组是一样的,像下面这样写:

match => [ "field1", "pattern1", "field2", "pattern2" ]

字段引用

字段是 Logstash::Event 对象的属性。我们之前提过事件就像一个哈希一样,所以你可以想象字段就像一个键值对。

小贴士:我们叫它字段,因为 Elasticsearch 里是这么叫的。

如果你想在 Logstash 配置中使用字段的值,只需要把字段的名字写在中括号 [] 里就行了,这就叫字段引用。

对于 嵌套字段(也就是多维哈希表,或者叫哈希的哈希),每层的字段名都写在 [] 里就可以了。比如,你可以从 geoip 里这样获取 longitude 值(是的,这是个笨办法,实际上有单独的字段专门存这个数据的):

[geoip][location][0]

条件判断(condition)

表达式支持下面这些操作符:

if "_grokparsefailure" not in [tags] {
} else if [status] !~ /^2\d\d/ and [url] == "/noc.gif" {
} else {
}

命令行参数

input {
    stdin { }
}
output {
    stdout { }
}
上一篇 下一篇

猜你喜欢

热点阅读