Estructurar datos no estructurados con GROK
Si está utilizando la pila Elastic (ELK) y está interesado en asignar registros Logstash personalizados a Elasticsearch, entonces esta publicación es para usted.
ELK Stack es una abreviatura de tres proyectos de código abierto: Elasticsearch, Logstash y Kibana. Juntos forman una plataforma de gestión de registros.
- Elasticsearch es un motor de búsqueda y análisis.
- Logstash es un canal de procesamiento de datos del lado del servidor que toma datos de múltiples fuentes al mismo tiempo, los transforma y luego los envía a un caché como Elasticsearch.
- Kibana permite a los usuarios visualizar datos usando tablas y gráficos en Elasticsearch.
Beats apareció más tarde y es un transportista de datos ligero. La introducción de Beats ha transformado a Elk Stack en Elastic Stack, pero ese no es el punto.
Este artículo se centra en Grok, que es una característica de Logstash que puede transformar sus registros antes de enviarlos al escondite. Para nuestros propósitos, solo hablaré sobre el procesamiento de datos de Logstash a Elasticsearch.
Grok- Logstash, - . (regex) .
, Grok , .
Grok
Grok, Logstash Elasticsearch Kibana, .
, . , .
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
, , , .
, , , API. .
- localhost == environment
- GET == method
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == response_status
- 46ms == response_time
- 5bc6e716b5d6cb35fc9687c0 == user_id
, . – . .
Grok
Grok
Logstash 100 . , , apache, linux, haproxy, aws .
, , ? Grok.
Grok
, Grok. Grok Debugger Grok Patterns.
, Grok : %{SYNTAX:SEMANTIC}
, , Discover Grok. , , Grok, , .
, Grok, , Github Elastic.
, - , .
Grok https://grokdebug.herokuapp.com/
:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Pattern:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Grok , — Logstash.
Logstash.conf
, ELK, Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
.
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
Logstash , , .
sudo service logstash restart
sudo service logstash status
, , , Elasticsearch Logstash Kibana!
Grok !
, , Grok Elasticsearch. . , , , url-.
¡Intenta darle una oportunidad a las expresiones de Grok! Si tiene otra forma de hacerlo, o tiene algún problema con los ejemplos anteriores, simplemente escriba un comentario a continuación para avisarme.
Gracias por leer, y síganme aquí en Medium para obtener más artículos interesantes sobre ingeniería de software.
Canal Telegram de Elasticsearch