(三)Elasticsearch快速开始

快速开始

本指南帮助初学者学习如何:
- 在测试环境中安装并运行Elasticsearch
- 向Elasticsearch添加数据
- 搜索和排序数据
- 在搜索期间从非结构化内容中提取字段

运行Elasticsearch

设置Elasticsearch最简单的方法是在Elastic Cloud上创建一个带有Elasticsearch服务的托管部署。如果您喜欢管理自己的测试环境,可以使用Docker安装和运行Elasticsearch。

1、在Elastic Cloud上使用

1. [获得免费试用](https://www.elastic.co/cn/cloud/elasticsearch-service/signup?baymax=docs-body&elektra=docs)。
2. 登录Elastic Cloud
3. 点击Create deployment.
4. 选择一个解决方案并为您的部署提供一个名称。
5. 点击Create deployment并且下载用户elastic的密码

2、自己测试环境docker安装

1). 安装并运行elasticsearch
	1. 安装并运行[Docker Desktop](https://www.docker.com/products/docker-desktop)
	2. 运行
		docker network create elastic
		docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.1
		docker run --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e 				"discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.14.1
2).安装并运行kibana
	要使用直观的UI分析、可视化和管理Elasticsearch数据,请安装Kibana
	1. 在新的终端会话中,运行:
	docker pull docker.elastic.co/kibana/kibana:7.14.1
	docker run --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.14.1
	2.访问kibana,http://localhost:5601

请求Elasticsearch

您可以使用REST api向Elasticsearch发送数据和其他请求。这允许您使用任何发送HTTP请求的客户端(如curl)与Elasticsearch进行交互。你也可以使用Kibana的控制台向Elasticsearch发送请求。

1、在Elastic Cloud上使用

1)、使用curl
 1. 要使用curl或其他客户机与Elasticsearch通信,您需要您的集群端点。转到Elasticsearch页面并单击Copy endpoint。
 2. 要提交一个示例API请求,请在新的终端会话中运行以下curl命令。使用elastic用户的密码替换<password>。用您的端点替换<elasticsearch_endpoint>。
 curl -u elastic:<password> <elasticsearch_endpoint>/
2)、使用kibana
1. 进入Kibana页面,点击Launch。
2. 打开Kibana的主菜单,进入Dev Tools >控制台。	![在这里插入图片描述](https://img-blog.csdnimg.cn/5990b19aecd14a44ac5790245f8fcada.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YCG5aSp5LmL5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16)
3. 在控制台中运行以下示例API请求:
GET /
curl -X GET "localhost:9200/?pretty"

2、自己docker测试环境

1)、使用curl
要提交一个示例API请求,请在新的终端会话中运行以下curl命令。

curl -X GET http://localhost:9200/

2)、使用kibana
  1. 打开Kibana的主菜单,进入Dev Tools >控制台。
    在这里插入图片描述
  2. 在控制台中运行以下示例API请求:
    GET /

添加数据

将数据作为JSON对象添加到Elasticsearch中,称为文档。Elasticsearch将这些文档存储在可搜索的索引中。

对于时间序列数据,如日志和指标,您通常将文档添加到由多个自动生成的支持索引组成的数据流中。

数据流需要一个与其名称匹配的索引模板。Elasticsearch使用这个模板来配置流的备份索引。发送到数据流的文档必须具有@timestamp字段。

添加单个文档

提交以下索引请求,将单个日志条目添加到logs-my_app-default数据流中。由于logs-my_app-default不存在,请求使用内置的logs-*-*索引模板自动创建它。
curl -X POST “localhost:9200/logs-my_app-default/_doc?pretty” -H ‘Content-Type: application/json’ -d’
{
“@timestamp”: “2099-05-06T16:21:15.000Z”,
“event”: {
“original”: “192.0.2.42 - - [06/May/2099:16:21:15 +0000] “GET /images/bg.jpg HTTP/1.0” 200 24736”
}
}

或在kibana开发工具中
POST logs-my_app-default/_doc
{
“@timestamp”: “2099-05-06T16:21:15.000Z”,
“event”: {
“original”: “192.0.2.42 - - [06/May/2099:16:21:15 +0000] “GET /images/bg.jpg HTTP/1.0” 200 24736”
}
}
响应包括Elasticsearch为文档生成的元数据:
- 包含文档的后台_index。Elasticsearch会自动生成备份索引的名称。
- 索引中文档的唯一_id。
{
“_index”: “.ds-logs-my_app-default-2099-05-06-000001”,
“_type”: “_doc”,
“_id”: “gl5MJXMBMk1dGnErnBW8”,
“_version”: 1,
“result”: “created”,
“_shards”: {
“total”: 2,
“successful”: 1,
“failed”: 0
},
“_seq_no”: 0,
“_primary_term”: 1
}

添加多个文档

使用_bulk端点在一个请求中添加多个文档。批量数据必须是换行分隔的JSON (NDJSON)。每行必须以换行符(\n)结束,包括最后一行。
PUT logs-my_app-default/_bulk
{ “create”: { } }
{ “@timestamp”: “2099-05-07T16:24:32.000Z”, “event”: { “original”: “192.0.2.242 - - [07/May/2020:16:24:32 -0500] “GET /images/hm_nbg.jpg HTTP/1.0” 304 0” } }
{ “create”: { } }
{ “@timestamp”: “2099-05-08T16:25:42.000Z”, “event”: { “original”: “192.0.2.255 - - [08/May/2099:16:25:42 +0000] “GET /favicon.ico HTTP/1.0” 200 3638” } }

curl方式如下:
curl -X PUT “localhost:9200/logs-my_app-default/_bulk?pretty” -H ‘Content-Type: application/json’ -d’
{ “create”: { } }
{ “@timestamp”: “2099-05-07T16:24:32.000Z”, “event”: { “original”: “192.0.2.242 - - [07/May/2020:16:24:32 -0500] “GET /images/hm_nbg.jpg HTTP/1.0” 304 0” } }
{ “create”: { } }
{ “@timestamp”: “2099-05-08T16:25:42.000Z”, “event”: { “original”: “192.0.2.255 - - [08/May/2099:16:25:42 +0000] “GET /favicon.ico HTTP/1.0” 200 3638” } }

检索数据

索引文档可以近乎实时地进行搜索。下面的搜索匹配logs-my_app-default中的所有日志条目,并按@timestamp按降序对它们进行排序。
GET logs-my_app-default/_search
{
“query”: {
“match_all”: { }
},
“sort”: [
{
“@timestamp”: “desc”
}
]
}
curl方式如下:
curl -X GET “localhost:9200/logs-my_app-default/_search?pretty” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“match_all”: { }
},
“sort”: [
{
“@timestamp”: “desc”
}
]
}

默认情况下,响应的hits部分最多包含匹配搜索的前10个文档。每个命中的_source包含索引期间提交的原始JSON对象。
{
“took”: 2,
“timed_out”: false,
“_shards”: {
“total”: 1,
“successful”: 1,
“skipped”: 0,
“failed”: 0
},
“hits”: {
“total”: {
“value”: 3,
“relation”: “eq”
},
“max_score”: null,
“hits”: [
{
“_index”: “.ds-logs-my_app-default-2099-05-06-000001”,
“_type”: “_doc”,
“_id”: “PdjWongB9KPnaVm2IyaL”,
“_score”: null,
“_source”: {
“@timestamp”: “2099-05-08T16:25:42.000Z”,
“event”: {
“original”: “192.0.2.255 - - [08/May/2099:16:25:42 +0000] “GET /favicon.ico HTTP/1.0” 200 3638”
}
},
“sort”: [
4081940742000
]
},

]
}
}

获取特定字段

对于大型文档来说,解析整个_source是很笨拙的。要从响应中排除它,请将_source参数设置为false。相反,使用fields参数来检索所需的字段。
GET logs-my_app-default/_search
{
“query”: {
“match_all”: { }
},
“fields”: [
“@timestamp”
],
“_source”: false,
“sort”: [
{
“@timestamp”: “desc”
}
]
}
响应以平面数组的形式包含每个命中的字段值。
{

“hits”: {

“hits”: [
{
“_index”: “.ds-logs-my_app-default-2099-05-06-000001”,
“_type”: “_doc”,
“_id”: “PdjWongB9KPnaVm2IyaL”,
“_score”: null,
“fields”: {
“@timestamp”: [
“2099-05-08T16:25:42.000Z”
]
},
“sort”: [
4081940742000
]
},

]
}
}

搜索日期范围

要在特定的时间或IP范围内进行搜索,请使用range查询。
GET logs-my_app-default/_search
{
“query”: {
“range”: {
“@timestamp”: {
“gte”: “2099-05-05”,
“lt”: “2099-05-08”
}
}
},
“fields”: [
“@timestamp”
],
“_source”: false,
“sort”: [
{
“@timestamp”: “desc”
}
]
}
您可以使用日期数学定义相对时间范围。下面的查询搜索过去一天的数据,它不会匹配logs-my_app-default中的任何日志条目。
GET logs-my_app-default/_search
{
“query”: {
“range”: {
“@timestamp”: {
“gte”: “now-1d/d”,
“lt”: “now/d”
}
}
},
“fields”: [
“@timestamp”
],
“_source”: false,
“sort”: [
{
“@timestamp”: “desc”
}
]
}

从非结构化内容中提取字段

您可以在搜索期间从非结构化内容(如日志消息)中提取运行时字段。
使用以下搜索将source.IP从event.original提取出来。要在响应中包含它,请添source.IP到fields参数。
GET logs-my_app-default/_search
{
“runtime_mappings”: {
“source.ip”: {
“type”: “ip”,
“script”: “”"
String sourceip=grok(’%{IPORHOST:sourceip} .*’).extract(doc[ “event.original” ].value)?.sourceip;
if (sourceip != null) emit(sourceip);
“”"
}
},
“query”: {
“range”: {
“@timestamp”: {
“gte”: “2099-05-05”,
“lt”: “2099-05-08”
}
}
},
“fields”: [
“@timestamp”,
“source.ip”
],
“_source”: false,
“sort”: [
{
“@timestamp”: “desc”
}
]
}

组合查询

可以使用bool查询组合多个查询。下面的搜索结合了两个范围查询:一个针对@timestamp,另一个针对source.ip运行时字段。
GET logs-my_app-default/_search
{
“runtime_mappings”: {
“source.ip”: {
“type”: “ip”,
“script”: “”"
String sourceip=grok(’%{IPORHOST:sourceip} .*’).extract(doc[ “event.original” ].value)?.sourceip;
if (sourceip != null) emit(sourceip);
“”"
}
},
“query”: {
“bool”: {
“filter”: [
{
“range”: {
“@timestamp”: {
“gte”: “2099-05-05”,
“lt”: “2099-05-08”
}
}
},
{
“range”: {
“source.ip”: {
“gte”: “192.0.2.0”,
“lte”: “192.0.2.240”
}
}
}
]
}
},
“fields”: [
“@timestamp”,
“source.ip”
],
“_source”: false,
“sort”: [
{
“@timestamp”: “desc”
}
]
}

汇总数据

使用聚合将数据汇总为指标、统计数据或其他分析数据。
下面的搜索使用聚合来使用http.response.body.bytes运行时字段计算average_response_size。聚合仅在与查询匹配的文档上运行。
GET logs-my_app-default/_search
{
“runtime_mappings”: {
“http.response.body.bytes”: {
“type”: “long”,
“script”: “”"
String bytes=grok(’%{COMMONAPACHELOG}’).extract(doc[ “event.original” ].value)?.bytes;
if (bytes != null) emit(Integer.parseInt(bytes));
“”"
}
},
“aggs”: {
“average_response_size”:{
“avg”: {
“field”: “http.response.body.bytes”
}
}
},
“query”: {
“bool”: {
“filter”: [
{
“range”: {
“@timestamp”: {
“gte”: “2099-05-05”,
“lt”: “2099-05-08”
}
}
}
]
}
},
“fields”: [
“@timestamp”,
“http.response.body.bytes”
],
“_source”: false,
“sort”: [
{
“@timestamp”: “desc”
}
]
}
响应的聚合对象包含聚合结果。
{

“aggregations” : {
“average_response_size” : {
“value” : 12368.0
}
}
}

探索更多搜索选项

要继续探索,索引更多的数据到您的数据流,并查看通用搜索选项

清理

当您完成时,删除您的测试数据流及其备份索引。
DELETE _data_stream/logs-my_app-default
您还可以删除您的测试部署

1、在Elastic Cloud

从部署概述页面中单击Delete deployment并按照提示操作。

2、在docker容器测试环境

要停止Elasticsearch和Kibana Docker容器,请运行:
docker stop es01-test
docker stop kib01-test
要移除容器及其网络,请执行:
docker network rm elastic
docker rm es01-test
docker rm kib01-test

下一步是什么?

通过设置数据层和ILM,最大限度地利用时间序列数据。有关时间序列数据,请参见。使用Elasticsearch
使用Fleet和Elastic Agent直接从数据源收集日志和指标,并将它们发送到Elasticsearch。参见fleet快速入门指南
使用Kibana来探索、可视化和管理您的Elasticsearch数据。请参阅Kibana快速入门指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天至尊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值