debugrammer/php-graylog-query-builder

Graylog REST API 的查询构建器

1.0.0 2019-11-05 01:30 UTC

This package is auto-updated.

Last update: 2024-09-13 08:03:51 UTC


README

PHP版本的Graylog 搜索查询构建器,特别适用于与Graylog REST API一起使用。

Latest Stable Version Total Downloads License

入门指南

目前支持PHP版本7.0至PHP 7.4。建议使用composer来安装库。

通过运行composer将php-graylog-query-builder添加到composer.json

$ composer require debugrammer/php-graylog-query-builder

或通过手动定义

"require": {
   "debugrammer/php-graylog-query-builder": "~1.0"
}

用法

use GraylogQueryBuilder\GraylogQuery as GraylogQuery;

GraylogQuery::builder()
    ->field('type', 'ssh')
    ->and()->exists('id')
    ->and()->openParen()
        ->raw('source:(dog.org OR cat.org)')
    ->closeParen()
    ->and()->range('http_response_code', '[', 200, 300, ']')
    ->build();

上述代码片段生成以下字符串。

type:"ssh" AND _exists_:id AND ( source:(dog.org OR cat.org) ) AND http_response_code:[200 TO 300]

构建查询

1. 语句

1.1. 词

包含该词或短语的消息。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->term('ssh')
    ->build();

输出

"ssh"

1.2. 模糊词

包含相似词或短语的消息。

1.2.1. 默认距离的模糊度

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->fuzzTerm('ssh logni')
    ->build();

输出

"ssh logni"~
1.2.2. 自定义距离的模糊度

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->fuzzTerm('ssh logni', 1)
    ->build();

输出

"ssh logni"~1

1.3. 存在

包含该字段的字段。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->exists('type')
    ->build();

输出

_exists_:type

1.4. 字段

1.4.1. 字段(字符串)

字段包含该词或短语的字段。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->field('type', 'ssh')
    ->build();

输出

type:"ssh"
1.4.2. 字段(数字)

字段包含该数字的消息。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->field('http_response_code', 500)
    ->build();

输出

http_response_code:500
1.4.3. 单侧无界范围查询

字段满足条件的消息。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->opField('http_response_code', '>', 500)
    ->build();

输出

http_response_code:>500

1.5. 模糊字段

包含相似词或短语的字段。

1.5.1. 默认距离的模糊度

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->fuzzField('source', 'example.org')
    ->build();

输出

source:"example.org"~
1.5.2. 自定义距离的模糊度

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->fuzzField('source', 'example.org', 1)
    ->build();

输出

source:"example.org"~1

1.6. 范围

1.6.1. 范围查询

方括号中的范围是包含的,花括号中的范围是排除的,甚至可以组合使用。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->range('bytes', '{', 0, 64, ']')
    ->build();

输出

bytes:{0 TO 64]
1.6.2. 日期范围查询

日期需要是UTC。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->range('timestamp', '[', '2019-07-23 09:53:08.175', '2019-07-23 09:53:08.575', ']')
    ->build();

输出

timestamp:["2019-07-23 09:53:08.175" TO "2019-07-23 09:53:08.575"]

1.6. 原始

原始查询。

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->raw('/ethernet[0-9]+/')
    ->build();

输出

/ethernet[0-9]+/

2. 并列

2.1. 且

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->term('ssh')
    ->and()->term('login')
    ->build();

输出

"ssh" AND "login"

2.2. 或

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->term('ssh')
    ->or()->term('login')
    ->build();

输出

"ssh" OR "login"

2.3. 非

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->not()->exists('type')
    ->build();

输出

NOT _exists_:type

3. 括号

用法

GraylogQueryBuilder\GraylogQuery::builder()
    ->exists('type')
    ->and()->openParen()
        ->term('ssh')
        ->or()->term('login')
    ->closeParen()
    ->build();

输出

_exists_:type AND ( "ssh" OR "login" )

高级用法

有时你可能想通过条件动态构建查询。

1. 预加Graylog查询

用法

$query = GraylogQueryBuilder\GraylogQuery::builder()
    ->not()->exists('type');

GraylogQueryBuilder\GraylogQuery::builder($query)
    ->and()->term('ssh')
    ->build();

输出

NOT _exists_:type AND "ssh"

2. 添加Graylog查询

用法

$query = GraylogQueryBuilder\GraylogQuery::builder()
    ->or()->exists('type');

GraylogQueryBuilder\GraylogQuery::builder()
    ->term('ssh')
    ->append($query)
    ->build();

输出

"ssh" OR _exists_:type