Logstash 9.x con Elasticsearch Kibana

Publicado el 30/07/2025

« Ver todas las conferencias Contáctenos
Logstash 9.x with Elasticsearch Kibana

Introducción

Configuraremos Logstash según esta documentación y que funcione con la versión 9 de Elasticsearch y Kibana. Suponemos que ya tiene Elasticsearch y que lo creó según...este tutorial, aunque puedes ignorar la instalación de Kibana si no necesitas las herramientas de desarrollo de UI (podemos usar comandos CURL para inspeccionar los datos).

Si está familiarizado con Logstash y desea comenzar a utilizar systemd directamente, vaya al paso final.

Requisitos

En el video, usamos una instancia de Ubuntu 24.04 ejecutándose en una máquina virtual con 8 GB de memoria. La máquina virtual se ejecutará en una red privada local. Instalaremos Elastic y Logstash en este servidor.

Pasos

Paso 1 - Actualizar Ubuntu

La instalación de Ubuntu es completamente nueva. Actualizamos la distribución e instalamos algunas herramientas que solemos usar en ambas máquinas.

apt-get update && apt dist-upgrade -y && apt-get install -y vim curl zip jq gnupg gpg

Paso 2: Instalar Logstash

Las instalaciones de Ubuntu necesitan estas dependencias, así que ejecute estos comandos en ambas:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.x.list apt-get update; apt-get install -y apt-transport-https; apt-get install -y logstash;

Paso 3: Prueba los conceptos básicos de Logstash

En las últimas versiones de Logstash (a diferencia de las versiones anteriores), solo puedes ejecutar herramientas de línea de comandos con un no-raíz usuario; de lo contrario, recibirá advertencias. (Mostraremos el método systemd en el paso final). Para usar las herramientas de línea de comandos, crearemos un usuario sin privilegios.

adduser em

Iniciar sesión como ellos usuario:

su em cd ~

Ahora prueba Logstash con esto.

/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }' --path.settings /home/em --path.data /home/em

Ahora cada vez que escribes algo, se imprime inmediatamente en stdout:

The stdin plugin is now waiting for input: hello world { "@timestamp" => 2025-07-28T22:38:19.282255105Z, "message" => "hello world", "event" => { "original" => "hello world" }, "@version" => "1", "host" => { "hostname" => "logstash" } }

Puedes presionar CTRL C para detener el proceso logstash.

Paso 4: Prueba la salida de Elasticsearch de Logstash

Copiar http_ca.crt

Como el raíz usuario:

cp /etc/elasticsearch/certs/http_ca.crt /home/em/ chown -R em:em /home/em

Ingesta CSV y salida a Elasticsearch

En los próximos pasos, utilizaremos el ellos usuario.

Haz esto /home/em/customers.csv:

Correo electrónico, nombre, apellido, ciudad, condado, estado, código postal, sitio web
carol.davis@ejemplo.net, Carol, Davis, Seattle, King, WA, 98101, www.caroldavisexample.net
faizal@holamundoejemplo.com, Faizal, Gupta, Kingston, King, WA, 93211, www.holamundoejemplo.com

Haz esto /home/em/customers.conf:

Entrada {
Archivo {
Ruta = "/home/em/customers.csv"
Posición_inicial = "inicio"
Ruta_desde_base_datos = "/dev/null"
}
}

Filtro {
csv {
Separador = "","
Omitir_encabezado = "verdadero"
Columnas = ["Correo electrónico", "Nombre", "Apellido", "Ciudad", "Condado", "Estado", "Código postal", "Web"]
}

Mutar {
Convertir = { "Código postal" = "entero" }
}
}

Salida {
Elasticsearch {
Hosts = ["${ES_HOST}"]
Ssl_enabled = verdadero
Autoridades_certificado_ssl = "/home/em/http_ca.crt"
Usuario = "elastic"
Contraseña = "${ES_PASS}"
Índice => "clientes"
document_id => "%{email}"
}

stdout { codec => rubydebug }
}

Utilizaremos una variable de entorno para ES_HOST.

Debemos establecer el ES_PASS. Dado que se trata de información confidencial, haremos lo siguiente con el almacén de claves:

/usr/share/logstash/bin/logstash-keystore create --path.settings /home/em /usr/share/logstash/bin/logstash-keystore add ES_PASS --path.settings /home/em

Ahora ya puedes empezar:

export ES_HOST="https://192.168.88.7:9200" && \ /usr/share/logstash/bin/logstash -f /home/em/customers.conf --path.settings /home/em --path.data /home/em

Vea los resultados:

curl -u elastic:ABCD1234 https://192.168.88.7:9200/customers/_search --cacert /home/em/http_ca.crt | jq .

Paso 5: Probar múltiples pipelines

Ejecutemos varias canalizaciones simultáneamente. Crearemos una nueva canalización llamada /home/em/tasks.conf:

Entrada {
Archivo {
Ruta = "/home/em/tasks.csv"
Posición_inicial = "inicio"
Ruta_desde_base_datos = "/dev/null"
}
}
Filtro {
csv {
Separador = "","
Encabezado_omisión = "verdadero"
Columnas = ["nombre_tarea", "descripción_tarea"]
}
}
Salida {
Elasticsearch {
Hosts = ["${ES_HOST}"]
Ssl_habilitado = "verdadero"
Autoridades_certificado_Ssl = "/home/em/http_ca.crt"
Usuario = "elastic"
Contraseña = "${ES_PASS}"
Índice = "tareas"
}

Salida_estándar {Códec = rubydebug}
}

Vamos a ingerir /home/em/tasks.csv, que debería tener este contenido:

task_name,task_description eat pizza,time to enjoy pizza drink water,stay hydrated

Agreguemos una entrada más a /home/em/customers.csv:

samo@hane.com,Samo,Hane,1st Street,NY,20192,www.samo.com

Y vamos a crear una /home/em/pipelines.yml con este contenido:

- pipeline.id: customers path.config: "/home/em/customers.conf" - pipeline.id: tasks path.config: "/home/em/tasks.conf"

El pipelines.yml El archivo debe estar en el directorio especificado por --path.settings.

Ahora ejecutemos ambas canalizaciones.customers.conf y tasks.conf:

export ES_HOST="https://192.168.88.7:9200" && \ /usr/share/logstash/bin/logstash --path.settings /home/em --path.data /home/em

Vea los resultados:

curl -u elastic:ABCD1234 https://192.168.88.7:9200/tasks/_search --cacert /home/em/http_ca.crt | jq . curl -u elastic:ABCD1234 https://192.168.88.7:9200/customers/_search --cacert /home/em/http_ca.crt | jq .

Paso 6: Ejecutar Logstash como servicio

Iniciar sesión como raíz usuario.

Repetimos todos los pasos anteriores, pero con la organización del sistema de archivos logstash predeterminada y agregamos algunos datos de prueba más.

mkdir -p /var/lib/logstash/certs/
cp /etc/elasticsearch/certs/http_ca.crt /var/lib/logstash/certs/

mkdir -p /var/lib/logstash/data/

cat > /var/lib/logstash/data/customers.csv <<EOL
correo electrónico, nombre, apellido, ciudad, condado, estado, código postal, web
cappy@ejemplo1.com, Cappy, Do, Toronto, King, WA, 98101, www.ejemplo1.com
bluey@ejemplo2.net, Bluey, Whaly, Miami, King, WA, 83211, www.ejemplo2.net
EOL

cat > /etc/logstash/conf.d/customers.conf <<'EOL'
entrada {
archivo {
ruta => "/var/lib/logstash/data/customers.csv"
start_position => "beginning"
fromdb_path => "/dev/null"
}
}

filter {
csv {
separator => ","
skip_header => "true"
columns => ["email", "first_name", "last_name", "city", "county", "state", "zip", "web"]
}

mutate {
convert => { "zip" => "integer" }
}
}

output {
elasticsearch {
hosts => ["${ES_HOST}"]
ssl_enabled => true
ssl_certificate_authorities => "/var/lib/logstash/certs/http_ca.crt"
user => "elastic"
password => "${ES_PASS}"
index => "clientes"
document_id => "%{email}"
}

stdout { codec => rubydebug }
}
EOL

cat > /var/lib/logstash/data/tasks.csv <<EOL
nombre_tarea, descripción_tarea
hacer la tarea, a los niños les encanta la tarea
lavar los platos, a papá le encanta lavar los platos
EOL
cat > /etc/logstash/conf.d/tasks.conf <<'EOL'
input {
file {
path => "/var/lib/logstash/data/tasks.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
skip_header => "true"
columns => ["nombre_tarea", "descripción_tarea"]
}
}
output {
elasticsearch {
hosts => ["${ES_HOST}"]
ssl_enabled => true
ssl_certificate_authorities => "/var/lib/logstash/certs/http_ca.crt"
usuario => "elastic"
contraseña => "${ES_PASS}"
índice => "tareas"
}

stdout { codec => rubydebug }
}
EOL

cat > /etc/logstash/pipelines.yml <<'EOL'
- pipeline.id: clientes
path.config: "/etc/logstash/conf.d/customers.conf"
- pipeline.id: tareas
path.config: "/etc/logstash/conf.d/tasks.conf"
EOL

chown -R logstash:logstash /var/lib/logstash
chown -R logstash:logstash /etc/logstash

En este punto, necesitamos establecer el ES_HOST variable de entorno:

systemctl edit logstash.service Entonces haz esto:

[Servicio]
Entorno="ES_HOST=https://192.168.88.7:9200"

Debería verse así:

logstash.service

Y luego agrega ES_PASS al almacén de claves:

/usr/share/logstash/bin/logstash-keystore create --path.settings /etc/logstash /usr/share/logstash/bin/logstash-keystore add ES_PASS --path.settings /etc/logstash

Ahora empieza las cosas

systemctl enable logstash systemctl daemon-reload systemctl start logstash

De vez en cuando puedes comprobar el estado con systemctl status logstash, o mira en el /var/log/syslog.

Deberías poder ver el contenido en elasticsearch con:

curl --cacert /var/lib/logstash/certs/http_ca.crt -u elastic:ABCD1234 https://192.168.88.7:9200/customers/_search | jq . curl --cacert /var/lib/logstash/certs/http_ca.crt -u elastic:ABCD1234 https://192.168.88.7:9200/tasks/_search | jq .