8

选择了带有graylog2的elasticsearch,我度过了非常糟糕的一周。我正在尝试使用 Python 对 ES 中的数据运行查询。

我尝试过关注客户。

  1. ESClient - 非常奇怪的结果,我认为它没有维护,query_body 没有效果它返回所有结果。
  2. Pyes - 不可读,无证。我已经浏览了资源并且无法弄清楚如何运行一个简单的查询,也许我不是那么聪明。我什至可以以 json 格式运行基本查询,然后简单地使用 Python 对象/迭代器对结果进行分析。但 Pyes 并不容易。
  3. Elasticutils - 另一个文档,但没有完整的示例。我收到以下错误并附有代码。我什至不知道它是如何使用这个 S() 连接到正确的主机的?

    es = get_es(hosts=HOST, default_indexes=[INDEX])

    basic_s = S().indexes(INDEX).doctypes(DOCTYPE).values_dict()

结果:

 print basic_s.query(message__text="login/delete")
  File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 223, in __repr__
    data = list(self)[:REPR_OUTPUT_SIZE + 1]
  File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 623, in __iter__
    return iter(self._do_search())
  File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 573, in _do_search
    hits = self.raw()
  File "/usr/lib/python2.7/site-packages/elasticutils/__init__.py", line 615, in raw
    hits = es.search(qs, self.get_indexes(), self.get_doctypes())
  File "/usr/lib/python2.7/site-packages/pyes/es.py", line 841, in search
    return self._query_call("_search", body, indexes, doc_types, **query_params)
  File "/usr/lib/python2.7/site-packages/pyes/es.py", line 251, in _query_call
    response = self._send_request('GET', path, body, querystring_args)
  File "/usr/lib/python2.7/site-packages/pyes/es.py", line 208, in _send_request
    response = self.connection.execute(request)
  File "/usr/lib/python2.7/site-packages/pyes/connection_http.py", line 167, in _client_call
    return getattr(conn.client, attr)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/pyes/connection_http.py", line 59, in execute
    response = self.client.urlopen(Method._VALUES_TO_NAMES[request.method], uri, body=request.body, headers=request.headers)
  File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
    return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
  File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
    return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
  File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
    return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
  File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 294, in urlopen
    return self.urlopen(method, url, body, headers, retries-1, redirect) # Try again
  File "/usr/lib/python2.7/site-packages/pyes/urllib3/connectionpool.py", line 255, in urlopen
    raise MaxRetryError("Max retries exceeded for url: %s" % url)
pyes.urllib3.connectionpool.MaxRetryError: Max retries exceeded for url: /graylog2/message/_search

我希望这个好项目的开发者能提供一些完整的例子。即使看来源,我也完全失去了。

有什么解决方案吗,用 elasticsearch 和 python 为我提供帮助,或者我应该放弃所有这些并支付一个不错的 splunk 帐户并结束这种痛苦。

我正在继续使用 curl,下载整个 json 结果并 json 加载它。希望可行,尽管 curl 从 elasticsearch 下载 100 万条消息可能不会发生。

4

6 回答 6

8

我发现 rawes 非常有用: https ://github.com/humangeo/rawes

这是一个相当低级的界面,但我发现使用它比使用高级界面要尴尬得多。如果您对此感兴趣,它还支持 Thrift RPC。

于 2012-09-11T00:32:12.300 回答
7

老实说,我最幸运的只是 CURLing 一切。ES 有很多不同的方法、过滤器和查询,以至于各种“包装器”很难重新创建所有功能。在我看来,这类似于将 ORM 用于数据库……您在易用性方面获得的收益会在灵活性/原始能力方面有所损失。

除了 ES 的大多数包装器并不是那么容易使用。

我会试一试 CURL,看看它对你有什么影响。您可以使用外部 JSON 格式化程序来检查您的 JSON,使用邮件列表查找示例,如果您使用 JSON,则可以使用文档。

于 2012-08-03T15:01:53.783 回答
7

显式设置主机为我解决了该错误:

basic_s = S().es(hosts=HOST, default_indexes=[INDEX])

于 2012-11-13T23:54:53.150 回答
4

FWIW,PYES 文档在这里:http ://packages.python.org/pyes/index.html

用法:http ://packages.python.org/pyes/manual/usage.html

于 2012-08-06T22:12:46.503 回答
3

ElasticSearch最近(2013 年 9 月)发布了一个官方 Python 客户端elasticsearch-py(PyPI 上的 elasticsearch,也在github 上),它应该是对官方 ElasticSearch API 的相当直接的映射。我还没有使用它,但它看起来很有希望,至少它会匹配官方文档!

编辑:我们开始使用它,我对它非常满意。ElasticSearch 的 API 非常干净,而 elasticsearch-py 维护了这一点。一般来说,更容易使用和调试,加上不错的日志记录。

于 2014-02-10T19:20:44.670 回答
2

ElasticUtils 有示例代码:http ://elasticutils.readthedocs.org/en/latest/sampleprogram1.html

如果您在文档中需要其他内容,请询问。

于 2012-08-06T19:14:28.837 回答