
Recopilant els LOGs de Synology a Elasticsearch i visualitzant-los a Grafana
Bo, va un altre post de recopilar logs i visualitzar-los per comprendre què passa en la nostra infraestructura, avui tenim un document on veurem com enviar els Logs d'una Synology al nostre Logstash per després emmagatzemar-lo a Elasticsearch i finalment visualitzar-lo amb Grafana.
Així que, ¡canya a la granota que és de goma! (que vell sóc, agur iogurt…) va! Si tenim una NAS del fabricant Synology i volem saber què és el que hi passa, el millor és sempre tirar-nos als logs, però és una mica avorrit llegir línies i línies de text, que no sempre van en temps real, que ens costa comprendre… Doncs per a això (i altres coses més) tenim Elastic Stack, on la Synology enviarà els Logs a Logstash, ací els rebrem i els tractarem, separando en distintos campos la info que nos interesa y luego se almacene en Elasticsearch. Para visualizar los datos siempre podemos usar Kibana, pero es que yo soy más de Grafana, ho sento, así que sea la elección que sea, podrás visualizar esos datos recopilados en distintos formatos, en tablas, gráficas, formacits, mapamundis… así interpretarás qué pasa en la Synology, quién accede o lo intenta, y qué hace… podrás verlo como siempre, en tiempo real o a modo histórico para hacer consultas. Comencem!
Primero obviamente tenemos que tener la parte de Elastic Stack instalada, el que ve sentLogstash, Elasticsearch yKibana; luego ya sería indicarle a nuestra Synology que envíe los Logs a Logstash, al puerto que nos de la gana, nos inventaremos uno, des del “Centro de Registros“ > “Envío de registros” > habilitamos “Enviar registros a un syslog server”, indicamos la IP de Logstash y el puerto y TCP o UDP a elección. Y aplicamos los cambios.
input { tcp { type => "Synology" port => "1516" tags => ["Synology"] } } filter { if [type] == "Synology" { grok { match => { "message" => [ "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:host_title} WinFileService Event: %{WORD:action}, Path: %{GREEDYDATA:path}, File/Folder: %{WORD:path_type}, Size: %{BASE10NUM:file_size} %{WORD:file_size_unit}, User: %{USERNAME:username}, IP: %{IP:src_ip}", "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:host_title} Connection: User \[%{USERNAME:username}\] from \[%{HOSTNAME:Equipo}\(%{IP:src_ip}\)\] via \[%{DATA:Protocolo}\] %{GREEDYDATA:Mensaje} \[%{DATA:shared_folder}\]", "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:host_title} Connection: User \[(%{USERNAME:username})?\] from \[%{IP:src_ip}\] %{GREEDYDATA:Mensaje}", "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:host_title} Connection\[%{INT:Id_proc}\]: SYSTEM: %{GREEDYDATA:Mensaje}", "^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:host_title} System %{USERNAME:username}: %{GREEDYDATA:Mensaje}" ] } } } } output { if ([type]=="Synology"){ elasticsearch { index => "synology-%{+YYYY.MM.dd}" hosts => "DIRECCION_IP_ELASTICSEARCH:9200" } } }
Ahora nos vamos a nuestro Logstash, y ahí podremos crear filtros para separar los distintos campos de los distintos logs que recibamos. Como siempre mejorable, pero estos grok nos valdrán al menos para una Synology DSM con versión 7.0. Así que creamos un fichero de configuración, por ejemplo ‘/etc/logstash/conf.d/synology.conf’ y con este contenido algo haremos.
Un cop creat el fitxer de configuració, recordar reiniciar el servicio de Logstash para recargar. Después como siempre, anirem a Kibana i un cop les dades estiguin entrant ja podrem anar a "Management" > "Stack management" > "Kibana" > "Index Patterns" > "Crea't index pattern" per crear el patró de l'índex, el que s' ha dit, com habitualment (en aquest cas i sense les cometes) ‘synology-*’ y tendremos los datos ya en Elasticsearch almacenados de manera correcta. Ahora podríamos conectarnos desde “Analytics” > “Discover” a nuestro índice de Synology y visualizar que está recogiendo datos.
Y luego ya, tras crear el índice en Kibana, ahora en nuestro Grafana deberíamos crear un “Data Source” que apunte contra nuestro Elasticsearch y el índice de Synology. Després ja és deixar volar la imaginació, fer un Dashboard amb diferents Panells, amb diferents dades a visualitzar, uno de estilo Sankey para ver IPs origen/destino y el tráfico que se envían, en formato columnas, entaules para ver datos concretos de por ejemplo los logins correctos, incorrectes, las conexiones, los ficheros que se crean, modifican, eliminan, los usuarios que realizan la acción…