Работа с elasticsearch
Создание индекса
curl -u ПОЛЬЗВАТЕЛЬ:ПАРОЛЬПОЛЬЗОВАТЕЛЯ -X GET "IPАДРЕС:5002/samples/"
Добавление
curl -u ПОЛЬЗВАТЕЛЬ:ПАРОЛЬПОЛЬЗОВАТЕЛЯ -XPOST --header 'Content-Type: application/json' IPАДРЕС:5002/sample/\_doc -d '{
"school" : "asdasaTEST", "@timestamp" : "'"$(date +%Y-%m-%dT%H:%M:%S)"'"
}'
Измнение
curl -u ПОЛЬЗВАТЕЛЬ:ПАРОЛЬПОЛЬЗОВАТЕЛЯ -XPUT --header 'Content-Type: application/json' IPАДРЕС:5002/samples/\\\_doc/4 -d '{
"school" : "asaTEST", "@timestamp" : "'"$(date +%Y-%m-%dT%H:%M:%S)"'"
}'
Вот несколько распространненых примеров команд ElasticSearch используя curl.curl
ElasticSearch часто сложен. Тут мы постараемся сделать его легче.
Вот несколько распространненых примеров команд ElasticSearch используя curl.curl
ElasticSearch часто сложен. Тут мы постараемся сделать его легче.
Удаление индексов.
Ниже индекс назван sample
curl -X DELETE 'http://localhost:9200/samples'
Показать все индексы
curl -X GET 'http://localhost:9200/\_cat/indices?v'
Показать все докуменыт в индексах
curl -X GET 'http://localhost:9200/sample/\_search'
Запрос используя параметры URL.
Тут мы используем Lucene запрос формат для написания: q=school:Harvard
curl -X GET http://localhost:9200/samples/\_search?q=school:Harvard
Запрос с JSON aka DSL для запросов в Elasticsearch.
Вы можете использовать параметры для URL. Но вы можете так же использоват JSON, как показано в следующем примере. JSON будет легче для чтения и отладки, когда у вас сложный запрос, чем один длинный запрос в виде URL.
curl -XGET --header 'Content-Type: application/json' http://localhost:9200/samples/\_search -d '{
"query" : {
"match" : { "school": "Harvard" }
}
}'
Показать список индексов.
Все поля индексов. Выведет все поля и их типы в каждом индексе.
curl -X GET http://localhost:9200/samples
Добавить данные
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/samples/\_doc/1 -d '{
"school" : "Harvard"
}'
Обновление документа.
Вот как добавить поле к существующему документу. Для начала создадим его, затем обновим.
Копирование
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/samples/\_doc/2 -d '
{
"school": "Clemson"
}'
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/samples/\_doc/2/\_update -d '{
"doc" : {
"students": 50000}
}'
Бэкап для индкса.
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/\_reindex -d '{
"source": {
"index": "samples"
},
"dest": {
"index": "samples\_backup"
}
}'
Объем загруженных данных в формате JSON:
export pwd="elastic:"
curl --user $pwd -H 'Content-Type: application/x-ndjson' -XPOST 'https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/0/\_bulk?pretty' --data-binary @<file>
Показать здоровье кластера
curl --user $pwd -H 'Content-Type: application/json' -XGET https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/\_cluster/health?pretty
Сбор
Для nginx веб сервера это произведет подсчет пользователей по городам.
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/\_search?pretty -d '{
"aggs": {
"cityName": {
"terms": {
"field": "geoip.city\_name.keyword",
"size": 50
}
}
}
}'
Это расширит на код ответа количества городов в nginx логах веб сервера.
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/\_search?pretty -d '{
"aggs": {
"city": {
"terms": {
"field": "geoip.city\_name.keyword"
},
"aggs": {
"responses": {
"terms": {
"field": "response"
}
}
}
},
"responses": {
"terms": {
"field": "response"
}
}
}
}'
Использование ElasticSearch с базовой авторизацией.
Если у вас включена безопасность в ElasticSearch, тогда вам необходимо предоставить пользователя и пароль, как показано ниже для всех команд-запросов:
curl -X GET 'http://localhost:9200/\_cat/indices?v' -u elastic:(password)
Красивый вывод.
Добавьте ?pretty=true к любому поиску чтобы вывести причесаный JSON:
curl -X GET 'http://localhost:9200/(index)/\_search'?pretty=true
Запрос на получение только определенных полей.
Вернет только определенные поля поместив их в массив _source
GET filebeat-7.6.2-2020.05.05-000001/\_search
{
"\_source": \["suricata.eve.timestamp","source.geo.region\_name","event.created"\],
"query": {
"match" : { "source.geo.country\_iso\_code": "GR" }
}
}
Запрос по дате.
В случае когда поле типа дата вы можете использовать математику дат:
GET filebeat-7.6.2-2020.05.05-000001/\_search
{
"query": {
"range" : {
"event.created": {
"gte" : "now-7d/d"
}
}
}
}