
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í:
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 .