无法在elasticsearch上请求数据

时间:2014-07-21 15:13:25

标签: php elasticsearch logstash

我正在开发网站连接日志的图表。日志由logstash解析并通过elasticsearch提供。

我已经开发了一些图表,没有什么特别的,也不是很难,但是很有效。

星期五我开始使用elasticsearch,当我发送查询时,我编写的每个脚本都会使数据失败。

我的第一个想法是我以某种方式修改了查询,因此我将其打印出来并发送给elasticsearch(带插件头)。查询很好,我有结果。

我尝试从logstash和elasticsearch中清除日志,然后重新启动以从已知的良好数据中提取日志......没有修复任何内容。

试图查看配置是否有任何错误,使用了工作的备份,也没有。

作为最后的希望,我试图打印PHP错误,并且我确实从elasticsearch的内部抛出异常:

Fatal error: Uncaught exception 'Guzzle\Http\Exception\ServerErrorResponseException' with message 'Server error response [status code] 500 [reason phrase] 

Internal Server Error [url] http://localhost:9200/empreinte_index/mobile/_search' in /home/empreinte/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/BadResponseException.php:43 

Stack trace: 
#0 /home/empreinte/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Request.php(145): Guzzle\Http\Exception\BadResponseException::factory(Object(Guzzle\Http\Message\EntityEnclosingRequest), Object(Guzzle\Http\Message\Response)) 

#1 [internal function]: Guzzle\Http\Message\Request::onRequestError(Object(Guzzle\Common\Event), 'request.error', Object(Symfony\Component\EventDispatcher\EventDispatcher)) 

#2 /home/empreinte/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php(164): call_user_func(Array, Object(Guzzle\Common\Event), 'request.error', Object(Symfony\Component\EventDispatcher\EventDispatcher)) 

#3 /home/empreinte/vendor/symfony/event-dispatcher/Symfony in /home/empreinte/vendor/elasticsearch/elasticsearch/src/Elasticsearch/Connections/GuzzleConnection.php on line 238 

所以这似乎让我觉得我的代码很好,但我无法找到我做错了什么,也找不到搜索的地方。

以下是我使用的脚本的最小示例:

<?php
    echo "Days";
    require '/home/empreinte/vendor/autoload.php';
    $client = new Elasticsearch\Client();

    $Query['index'] = 'empreinte_index';
    $Query['type'] = 'web';

    echo ".";

    //Building the timeframe needed. For brevity, using hardcoded data.

    $timeframe = "{"from" : "1404165600", "to" : "1404252000" },{"from" : "1404252000", "to" : "1404338400" }";

    echo ".";

    $Query['body']='
    {
        "aggs" : 
        {
            "temps" : 
            {
                "range" : 
                {
                    "field" : "time",
                    "ranges" : ['.$timeframe.']
                },
                "aggs" : 
                { 
                    "new_users" : 
                    { 
                        "terms" : 
                        { 
                            "field" : "is_newuser" 
                        } 
                    }
                }
            }
        }   
    }';

    echo ".";

    $result = $client->search($Query);

    //Parse the data to get them in usable form for graphs

    echo "OK</br>";

?>

哪个输出&#34;天......&#34;,以及PHP设置为显示它的例外。

(如果需要,我会发布配置文件和一些日志)。

我该如何解决这个问题?我在哪里可以找到类似的错误,我可以找到修复程序?错误是什么意思?

1 个答案:

答案 0 :(得分:0)

如果您检查回复,则看起来像是一个请求问题:'request.error'

当你构造时间帧时,你使用双引号来构造字符串,但也在字符串中,这也是一个问题。

我真的不认为这是问题所在,但试图在表示时间戳的长点周围松开引号。

最后尝试打印查询并尝试使用elasticsearch或head plugin或kopf插件等工具中的查询。

希望有所帮助