
Uma aplicação Python para filtrar e transferir logs do Zeek para o Elastic/OpenSearch+Humio. Esta aplicação também pode emitir logs JSON puros para o stdout para processamento posterior!
Esta aplicação Python converte os logs ASCII TSV e JSON do Zeek para o formato JSON de carga em massa do ElasticSearch.

Quer ver vários logs do Zeek para o mesmo ID de conexão (uid) ou ID de arquivo (fuid)? Aqui estão as ocorrências de files.log, http.log e conn.log para um único uid:

Você pode realizar buscas por sub-rede no tipo 'addr' do Zeek:

Você pode criar gráficos de séries temporais, como este gráfico de NTP e HTTP:

Endereços IP podem ser geolocalizados com a opção de linha de comando -g:

Agregações são simples e rápidas:

Esta aplicação "simplesmente funcionará" quando os formatos de log do Zeek mudarem. A lógica lê os nomes dos campos e os tipos associados para configurar os mapeamentos corretamente no ElasticSearch.
Esta aplicação reconhecerá logs gzip ou descompactados. Esta aplicação presume
que você tenha o ElasticSearch configurado no seu localhost na porta padrão.
Se você não tiver o ElasticSearch, pode enviar o JSON para o stdout com as opções de linha de comando -s -b
para processar com a aplicação jq.
Você pode adicionar um subcampo keyword aos campos de texto com a opção de linha de comando -k. Isso é útil
para agregações no Kibana.
Se o Python já estiver no seu sistema, não há nada adicional para você copiar para a sua máquina além de Elasticsearch, Kibana e zeek2es.py se você já tiver a biblioteca requests instalada.
Supondo que você atenda aos requisitos, não há instalação. Basta
copiar o zeek2es.py para o seu host e executá-lo com Python. Depois que os logs do Zeek
forem importados com a geração automática de nome de índice (ou seja, você não forneceu a opção -i),
você encontrará seus índices nomeados como "zeek_zeeklogname_date", onde zeeklogname é um nome de log como conn
e a date está no formato YYYY-MM-DD. Defina seu padrão de índice no Kibana para corresponder a zeek* neste caso. Se
você nomeou seu índice com a opção -i, precisará criar um padrão de índice no Kibana que
corresponda ao seu esquema de nomenclatura.
Se você está atualizando o zeek2es, consulte a seção sobre atualização do zeek2es.
Se você estiver usando o Elastic v8.0+, ele tem a segurança habilitada por padrão. Isso adiciona a exigência de um nome de usuário e senha, além de HTTPS.
Se você quiser poder excluir índices/fluxos de dados com curingas (como mostram os exemplos neste readme),
edite elasticsearch.yml com a seguinte linha:```
action.destructive_requires_name: false
Você também precisará alterar os comandos curl neste readme para conter `-k -u elastic:<password>`
onde a senha do usuário `elastic` é definida com um comando como o seguinte:```
./bin/elasticsearch-reset-password -u elastic -i
Você pode usar zeek2es.py com as opções de linha de comando --user e --passwd para especificar suas
credenciais para o ES. Você também pode fornecer essas opções via os argumentos de linha de comando extras para os scripts
auxiliares.
Provavelmente a maneira mais fácil de usar este código é através do Docker. Todos os arquivos estão no diretório docker.
Primeiro, você vai querer editar as linhas com CHANGEME!!! no arquivo .env para se adequar ao seu ambiente.
Você também precisará editar a senha do Elastic em docker/zeek2es/entrypoint.sh para que corresponda. Ela pode ser encontrada após a opção --passwd.
Em seguida, você pode entrar no diretório docker e digitar os seguintes comandos para subir
um cluster zeek2es e Elasticsearch:```
docker-compose build
dockr-compose up
Agora você pode colocar logs no diretório `VOLUME_MOUNT/data/logs` (`VOLUME_MOUNT` que você definiu no arquivo `.env`).
Quando logs são CRIADOS neste diretório, o zeek2es começará a processá-los e enviá-los para o Elasticsearch.
Em seguida, você pode fazer login em https://localhost:5601 com o nome de usuário e a senha que você configurou no arquivo `.env`.
Por padrão, há um certificado autoassinado, mas você pode alterá-lo se editar os arquivos do docker compose. Uma vez dentro
do Kibana, você irá para Stack Management->Data Views e criará uma data view para `logs*` com o timestamp `@timestamp`.
Agora você poderá ir para o Discover e começar a pesquisar seus logs! Seus dados são persistentes no diretório `VOLUME_MOUNT/data` que você definiu.
Se você quiser remover todos os dados, basta `rm -rf VOLUME_MOUNT/data`, substituindo o diretório que você definiu nesse comando de remoção.
Na próxima vez que você iniciar seu cluster, ele estará novinho em folha para mais dados.
## Atualizando o zeek2es <a name="upgradingzeek2es" />
A maioria das atualizações deve ser tão simples quanto copiar o novo [zeek2es.py](https://github.com/corelight/zeek2es/blob/master/zeek2es.py) sobre
o antigo. Em alguns casos, o pipeline de ingestão do ES necessário para a opção de linha de comando `-g`
pode mudar durante uma atualização. Portanto, é fortemente recomendado que você exclua
seu [pipeline de ingestão](#esingestpipeline) antes de executar uma nova versão do zeek2es.py.
### Pipeline de Ingestão do ES <a name="esingestpipeline" />
Se você precisar [excluir o pipeline de ingestão do ES "zeekgeoip"](https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-pipeline-api.html)
usado para geolocalizar endereços IP com a opção de linha de comando `-g`, você pode fazer isso graficamente
por meio do Stack Management->Ingest Pipelines do Kibana ou este comando fará isso por você:```
curl -X DELETE "localhost:9200/_ingest/pipeline/zeekgeoip?pretty"
Este comando é fortemente recomendado sempre que atualizar sua cópia do zeek2es.py.