es收集的数据虽然可以在kibina里展示,但是要局限也比较大,不能用kibina展示的只能自己动手写web展示了,利用php读取elasticsearch数据,经过处理成echarts 图表数据通过web界面展示。
贴代码吧:es查询拼装类
<?php
use Elasticsearch\ClientBuilder;
class es {
private $es;
private static $instance;
private function __construct($es_config)
{
$this->es = ClientBuilder::create()
->setHosts($es_config)
->build();
}
static public function getInstance($es_config){
if (!self::$instance instanceof self) {
self::$instance = new self($es_config);
}
return self::$instance;
}
//获取一个文档
public function getDoc($query){
return $this->es->get($query);
}
//获取查询结果
public function search($query){
return $this->es->search($query);
}
//es查询拼装
public function queryBuild($params){
if($params['start'] && $params['end']){
$arr['bool']['must'][0]['range']['date'] = array('gte'=>$params['start'],'lt'=>$params['end'],'format'=>'epoch_millis');
}
if($params['term']){
foreach ($params['term'] as $v){
$arr['bool']['must'][] = array('term'=>array($v[0]=>$v[1]));
}
}
if($params['not_term']){
foreach ($params['not_term'] as $v){
$arr['bool']['must_not'][] = array('term'=>array($v[0]=>$v[1]));
}
}
if($params['match']){
foreach ($params['match'] as $v){
$arr['bool']['must'][] = array('match'=>array($v[0]=>$v[1]));
}
}
if($params['not_match']){
foreach ($params['not_match'] as $v){
$arr['bool']['must_not'][] = array('match'=>array($v[0]=>$v[1]));
}
}
if($params['exists']){
foreach ($params['exists'] as $v){
$arr['bool']['must'][] = array('exists'=>array('field'=>$v));
}
}
if($params['not_exists']){
foreach ($params['exists'] as $v){
$arr['bool']['must_not'][] = array('exists'=>array('field'=>$v));
}
}
if($params['should_match']){
foreach ($params['should_match'] as $v){
$arr['bool']['should'][] = array('match'=>array($v[0]=>$v[1]));
}
}
if($params['should_term']){
foreach ($params['should_term'] as $v){
$arr['bool']['should'][] = array('term'=>array($v[0]=>$v[1]));
}
}
if($arr){
return json_encode($arr);
}
}
public function del($indexName){
$param = ['index' => $indexName];
try{
$this->es->indices()->delete($param);
}catch (Exception $e){
//var_dump($e);
}
}
}
使用方式:php获取http参数,拼成数组传递给queryBuild生成es的query查询体
$es_config = array(
array('host' => '10.27.106.1','port' => '9200','user' => 'elastic','pass' => 'pass'),
array('host' => '10.27.106.2','port' => '9200','user' => 'elastic','pass' => 'pass'),
)
$es = es::getInstance($es_config);
$queryParam = $es->queryBuild(['start'=>$param['t1'],'end'=>$param['t2'],'exists'=>['play']]);
$query = [
'index' => 'index_name',
'type' => 'type_name',
'body' => '
{"size": 0,
"query":'.$queryParam.'
}'
];
$res = $es->search($query);