Выведем такие теги за 6 дней где
"request": "DT1=00"
"x_forwarded_for" существует
"tls_cipher" существует
Так как данных за 6 дней получается больше чем 9999 hits , выбираем в кибане самый большой объем данных и пытаемся получить промежуток времени в который уложимся до 9999 hits, у меня получилось 5 мин.
php скрипт
<?php
error_reporting(E_ALL);
ini_set("log_errors", true);
ini_set('display_errors', true);
ini_set('memory_limit', '1024M');
date_default_timezone_set('Europe/Moscow');
require '/opt/web/vendor/autoload.php';
use Elasticsearch\ClientBuilder;
class raznoe {
private $hosts;
private $client;
private $date1;
private $date2;
private $find;
private $conver_id;
private $message;
private $clienti_d;
private $version;
private $final;
private $conf=array();
private $id;
private $meta;
public function init()
{
$this->hosts = [
[
'host' => 'server.elk.local',
'port' => '9200',
'user' => 'username',
'pass' => 'passwd'
]
];
$this->client = ClientBuilder::create()
->setHosts($this->hosts)
->build();
}
public function find_step1($date1,$date2)
{
$json= '{
"version": true,
"size": 9999,
"sort": [
{
"@timestamp": {
"order": "desc",
"unmapped_type": "boolean"
}
}
],
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"match_phrase": {
"request": "DT1=00"
}
},
{
"exists": {
"field": "x_forwarded_for"
}
},
{
"exists": {
"field": "tls_cipher"
}
},
{
"range": {
"@timestamp": {
"gte": "'.$date1.'",
"lte": "'.$date2.'",
"format": "strict_date_optional_time"
}
}
}
],
"should": [],
"must_not": []
}
}
}';
$params = [
'index' => "access",
'body' => $json
];
$results = $this->client->search($params);
for($i=0;$i<count($results['hits']['hits']);$i++)
{
echo $results['hits']['hits'][$i]['_source']['@timestamp']." ".$results['hits']['hits'][$i]['_source']['x_forwarded_for']." ".$results['hits']['hits'][$i]['_source']['tls_cipher']." ".$results['hits']['hits'][$i]['_source']['tls_ver']."\n";
}
}
}
$raznoe= new raznoe;
$raznoe->init();
$data1="2024-01-29T21:00:00";
$data2="2024-01-29T21:00:00";
for($i=0;$i<1728;$i++)
{
if($i==0) {$j=0;} else {$j=5;}
$data1=date('Y-m-dTH:i:s',(strtotime ( "+".$j." minutes" , strtotime ( $data1) ) ));
$data2=date('Y-m-dTH:i:s',(strtotime ( "+5 minutes" , strtotime ( $data2) ) ));
$data1=str_replace ("MSK", "T", $data1);
$data2=str_replace ("MSK", "T", $data2);
$raznoe->find_step1($data1,$data2);
echo $data1."\n".$data2."\n\n";
}
?>
Выводим за 6 дней с 2024-01-29T21:00:00 , вывод будем делать каждые 5 мин , 1728 - это столько раз повторяется 5 мин в течении 6 дней