logstach的使用

安装logstach

https://www.elastic.co/downloads/logstash
直接下载后解压即可,注意选好版本号!! 虽然logstach是可以独立运行,但一般是和 es对应的,所以版本需要选择和es一样的,免得后面出现奇怪的问题!
不需要配环境变量什么的.

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.10.tar.gz
tar -xzvf logstash-5.6.10.tar.gz

查看文档

https://www.elastic.co/guide/en/logstash/5.6/logstash-5-6-10.html#logstash-5-6-10

一些配置

解压后进入 conf目录,有如下文件

jvm.options
log4j2.properties
logstash.yml
startup.options

文件名已经说明了大体功能 。
这些配置在测试阶段默认就行,

logstash.yml 的配置,可参考 https://www.elastic.co/guide/en/logstash/5.6/logstash-settings-file.html

启动说明

软件的启动需要一个 (输入,filter和输出)的conf( 注意,这个conf和上面的不一样,这个是配置是具体业务的)
如官网中的说法:

# This is a comment. You should use comments to describe
# parts of your configuration.
input {
  ...
}

filter {
  ...
}

output {
  ...
}

但是!!! 也可以不要这个conf,直接用命令行加上选项,把配置加上,下面会有这样的例子

第一个直接的例子

直接启动:

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

输入和输出都是控制台,输入和输出如下:

aaaaaaaaaaaaaaaa
{
      "@version" => "1",
          "host" => "onlinegame.i.nease.net",
    "@timestamp" => 2018-08-27T03:17:32.704Z,
       "message" => "aaaaaaaaaaaaaaaa"
}
bbbbbbbbbbbbbbb
{
      "@version" => "1",
          "host" => "onlinegame.i.nease.net",
    "@timestamp" => 2018-08-27T03:17:40.610Z,
       "message" => "bbbbbbbbbbbbbbb"
}

例子,加上基本的配置文件,输入还是控制台

一个官网的例子

input { stdin { } }

filter {
  mutate { add_field => { "show" => "This data will be in the output" } }
  mutate { add_field => { "[@metadata][test]" => "Hello" } }
  mutate { add_field => { "[@metadata][no_show]" => "This data will not be in the output" } }
}

output {
  if [@metadata][test] == "Hello" {
    stdout { codec => rubydebug }
  }
}

采用官网的例子,如下,输入和输出都是控制台,不过加了一些filter

启动:

bin/logstash -f /home/comp/logconf/console_console.conf

控制台输出:


gogogogogoog
{
      "@version" => "1",
          "host" => "onlinegame.i.nease.net",
          "show" => "This data will be in the output",
    "@timestamp" => 2018-08-27T03:25:43.309Z,
       "message" => "gogogogogoog"
}

上面的 @metadata 是一个内置自定义字段,里面的内容不会输出,这个字段对一些 判断条件非常有用 。

例子,输出到文件

一个官网的例子

input { stdin { } }

filter {
  mutate { add_field => { "show" => "This data will be in the output" } }
  mutate { add_field => { "[@metadata][test]" => "Hello" } }
  mutate { add_field => { "[@metadata][no_show]" => "This data will not be in the output" } }
}

output {
  file {
    path => "/home/comp/logs/logstach_output/%{+yyyy.MM.dd.HH}.log"
  }
}

启动logstach

bin/logstash -f /home/comp/logconf/console_file.log

如上,输出一个文件,文件名是(时间.log)

例子,从tcp开出的端口输出到es中

一个官网的例子

input {
  tcp {
    port => 8002
    type => syslog
  }
  udp {
    port => 8002
    type => syslog
  }
}

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %                         {GREEDYDATA:syslog_message}"  }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

output {
  elasticsearch {
    hosts => ["10.88.88.88:9200"]
    index => "logstach_a"
  }
}

启动logstach

bin/logstash -f /home/comp/logconf/tcp_es.log

logstach 监听 8002 端口,输出 到 es中,index为logstach_a
我们使用 telnet 127.0.0.1 8002 ,然后里面输入以下内容:

Dec 23 12:11:43 louis postfix/smtpd[31499]: connect from unknown[95.75.93.154]
Dec 23 14:42:56 louis named[16000]: client 199.48.164.7#64817: query (cache) 'amsterdamboothuren.com/MX/IN' denied
Dec 23 14:30:01 louis CRON[619]: (www-data) CMD (php /usr/share/cacti/site/poller.php >/dev/null 2>/var/log/cacti/poller-error.log)
Dec 22 18:28:06 louis rsyslogd: [origin software="rsyslogd" swVersion="4.2.0" x-pid="2253" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.

关于 filter,我们可以看到filter中有 grok,这是 用于 把非结构化但有规则的数据处理成 结构化内容, 上面的意思是 message 的内容会被解析成相应的字段.
如果 不符合相应的格式,也不会抛错,只是会不去filter处理.

例子,输入json输出到按日志分的 es中,

input {
  tcp {
    port => 8002
    type => syslog
  }
  udp {
    port => 8002
    type => syslog
  }
}

filter {
    json{source=> "message"}
}

output {
  elasticsearch {
    document_type => "cod"
    hosts => ["10.88.88.88:9200"]
    index => "logstach_json"
  }
}

在telnet 中输入

{"name":"ddddd","age":121}

es中的结果:

      {
        "_index": "logstach_json",
        "_type": "cod",
        "_id": "AWV6Ja_ARuskeT_Rckb6",
        "_score": 1,
        "_source": {
          "@timestamp": "2018-08-27T06:50:14.809Z",
          "port": 32925,
          "@version": "1",
          "host": "127.0.0.1",
          "name": "ddddd",
          "message": """{"name":"ddddd","age":121}
""",
          "type": "syslog",
          "age": 121
        }
      },

关于 es中的type 是怎么定的? 如果 我们不定义 document_type,数据也是能扔到es的,不过其type会变成数据中的type,如上面的例子中,type是syslog
设定一个json例子,里面有日期,根据日期不同放到不同的表中

说明

使用上,我们会更关注logstash 中的 各种 plugins, 在input,output,filter,在官网可以找到非常丰富的资料

参考:

https://www.imooc.com/video/16134
https://www.elastic.co/guide/en/logstash/5.6/index.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值