• 2017.8.1 logstash基础语法学习


    数据类型

    1 bool:debug => true
    2 string:host => "hostname"
    3 int:port => 514
    4 array:match => ["datetime", "UNIX", "ISO8601"]
    5 hash:options => {
    6     key1 => "value1",
    7     key2 => "value2"
    8 }

    字段引用:

    [field_name]  

    [geoip][location][0]

    "the longitude is %{[geoip][location][0]}"

    条件判断

    1 判等:==, !=, <, >, <=, >=
    2 正则:=~, !~
    3 包含:in, not in
    4 布尔:and, or, nand, xor
    5 一元:!()

    命令行参数:

    1 执行标准输入输出 bin/logstash -e ''
    2 执行指定配置内容 bin/logstash -e '配置内容'
    3 执行配置文件 bin/logstash -f bin/logstash.conf
    4 读取confs下所有配置文件,拼接成大的配置文件再执行 bin/logstash -f /bin/confs/
    5 测试配置文件 bin/logstash -f bin/logstash.conf --configtest
    6 输出错误到日志 bin/logstash -l bin/logstash/logs/logstash.log
    7 其他略。

    输入插件

    1 标准输入

    1 input {
    2     stdin {
    3         add_field => {"key" => "value"}
    4         codec => "plain"
    5         tags => ["add"]
    6         type => "std"
    7     }
    8 }

    type:标记事件类型

    tags:在数据处理过程中,由具体的插件来添加和删除的。 ???

    2 读取文件

    1 input
    2     file {
    3         path => ["/var/log/*.log", "/var/log/message"]
    4         type => "system"
    5         start_position => "beginning"
    6     }
    7 }

    start_position : logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,有点类似 cat,但是读到最后一行不会终止,而是继续变成 tail -F

    3 读取网络数据

    4 生成测试数据

    1 input {
    2     generator {
    3         count => 10000000
    4         message => '{"key1":"value1","key2":[1,2],"key3":{"subkey1":"subvalue1"}}'
    5         codec => json
    6     }
    7 }

    ELK的性能如何?

    ELK并不是一个软件,而是一个并不耦合的套件,所以需要分开讨论性能。

    Logstash:logstash本身并不维护队列,所以要熟悉测试方法。另外,logstash给自己的线程都设置了单独的名称,可以top -H查看每个线程的负载情况。

    es:es是一个分布式系统,所以需要关注在确定的单机处理能力前提下,性能能否做到线性拓展。另外,有效的利用mapping API很重要。

    kibana:只是一个单页web应用,加载慢基本是由于es的请求响应不够快造成。

    5 读取syslog数据

    6 读取redis数据

    作为单独一篇。

    7读取collectd数据

    3 编码插件

    3.1 json编码

    1 input {
    2     file {
    3         path => "/var/log/nginx/access.log_json""
    4         codec => "json"
    5     }
    6 }

    3.2 合并多行数据

    1 input {
    2     stdin {
    3         codec => multiline {
    4             pattern => "^["
    5             negate => true
    6             what => "previous"
    7         }
    8     }
    9 }

    这个正则还可以用 grok 表达式,稍后你就会学习这方面的内容。

    4 过滤器插件

    4.1 grok

    1 input {stdin{}}
    2 filter {
    3     grok {
    4         match => {
    5             "message" => "s+(?<request_time>d+(?:.d+)?)s+"
    6         }
    7     }
    8 }
    9 output {stdout{}}

    官方提供的预定义 grok 表达式见:https://github.com/logstash/logstash/tree/v1.4.2/patterns

    filter {
        grok {
            patterns_dir => "/path/to/your/own/patterns"
            match => {
                "message" => "%{SYSLOGBASE} %{DATA:message}"
            }
            overwrite => ["message"]
        }
    }
  • 相关阅读:
    [Leetcode]142. Linked List Cycle II
    c程序设计语言笔记001
    把输入一次一个字符复制到输出
    linux笔记
    转 算法之二叉树各种遍历
    将输入复制到输出
    java.lang.OutOfMemoryError处理错误
    字号对照表
    颜色十六进制对照表一
    CSS样式(转)
  • 原文地址:https://www.cnblogs.com/lyh421/p/7268577.html
Copyright © 2020-2023  润新知