【BAE专业版】如何将日志写入到ElasticSearch

  • 简介

当拥有大量的BAE应用,查看日志和定位日志变得较为繁琐,而将日志写入到ElasticSearch,再通过ElasticSearch的强大搜索功能,即可满足日志的各种查询需求。这里将讲解一个简单的demo,将日志写入到ElasticSearch中。

  • 创建百度ElasticSearch集群

百度ElasticSearch是一项托管服务,让您可以在百度云中轻松地部署、操作和扩展 Elasticsearch,完全兼容ElasticSearch开源API。这里我们以百度ElasticSearch为例,当然也开源自己搭建ElasticSearch集群。

ElasticSearch的url信息:

ElasticSearch Url为http://elastic.baidu.com:8999/集群ID。百度ElasticSearch采用BasicAuthorization,user为superuser,password为创建时设置。

  • 写日志到ElasticSearch中

因为百度ElasticSearch需要BasicAuth,可以通过如下代码创建认证的client:

private WebResource createWebResource() {
    String url = "http://elastic.baidu.com:8999/cluser_id/index/type";
    String user = "superuser";
    String password = "password";
    final ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    client.addFilter(new HTTPBasicAuthFilter(user, password));
    return client.resource(url);
}

这里所使用的Client、WebResource、ClientConfig和DefaultClientConfig都是jersey-client的1.18.5版本中的类。

ElasticSearch提供了RESTful API,在程序中,可以将日志发送到elasticSearch中。代码大致如下:

public void wirteToElasticSearch(String message) {
    WebResource webResource = createWebResource();
    ClientResponse response = null;
    try {
        response = webResource.type("application/json")
                .post(ClientResponse.class, toJson(message));
    } catch (Exception e)
        e.printStackTrace();
    } finally {
        if (response != null) {
            response.close();
        }
    }
}

其中toJson函数是将message转为json字符串,形式如下:

{
    "createTime": "2016-08-10T16:00:00",
    "content": message"
}
  • 查询ElasticSearch中的日志

查询时,ElasticSearch提供了灵活的查询API,这里仅使用query_string来查询示例。代码如下:

public String queryWriteLog(String message) {
    WebResource webResource = createWebResource().path("/_search");
    return webResource.accept("application/json")
            .type("application/json")
            .post(String.class, toJsonRequest(message));
}

示例代码用于全文匹配包含message的内容,且限制最多返回50个结果。
其中toJsonRequest是将message转为查询请求体,形式如下:

{
    "query": {
        "query_string": {
            "query": "*" + message + "*"
        }
    },
    "size": 50
}

查询结果示例如下:

关于百度ElasticSearch API的使用可以参考:https://cloud.baidu.com/doc/BES/QuickStart.html#.E5.AF.BC.E5.85.A5.E6.9F.A5.E8.AF.A2

  • 总结

写入和查询,都是通过自己代码实现,可以根据各种使用场景进行灵活变化,但需要使用者对ElasticSearch的API较为熟悉。
ELK(ElasticSearch+Logstash+Kibana)日志分析平台,有更好的日志分析和展示,需要更多的资源和机器进行部署,适合有大量日志需要分析的用户。后续将有关于使用BAE专业版搭建ELK的文章。

此条目发表在 BAE使用 分类目录。将固定链接加入收藏夹。

发表评论