Graylog: Introdução

Como começar com o Graylog

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Graylog cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Servidor de email SMTP ilimitado e dedicado incluído.
  • Atualizações sem esforço com apenas um clique.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://logs.sua-empresa.com).
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: são necessários apenas 5 minutos para experimentar a solução Graylog cloud hosting da Stackhero!

Uma entrada é o ponto final onde o Graylog recebe os seus logs. Pode enviar logs usando TCP ou UDP. Além disso, o Graylog pode recolher entradas de logs a partir de uma API, de uma fila Kafka, de um servidor RabbitMQ e de outros métodos.

Neste exemplo, vamos criar uma entrada UDP bruta. Para começar, abra a interface do Graylog e navegue até "System" e depois "Inputs". Escolha "Raw/Plaintext UDP" e clique em "Launch new input". Configure a sua entrada com os seguintes valores e valide o formulário:

  1. Node: Selecione o seu nó
  2. Title: RAW UDP
  3. Port: 5555

Em seguida, abra um terminal no seu computador e envie uma mensagem UDP para o seu servidor Graylog. Lembre-se de substituir XXXXXX pelo nome de domínio do seu serviço:

  • No macOS: echo "Hello Graylog from UDP" | nc -u -w1 -c <XXXXXX>.stackhero-network.com 5555
  • No Linux: echo "Hello Graylog from UDP" | nc -u -w1 <XXXXXX>.stackhero-network.com 5555

Após enviar a mensagem, volte ao Graylog e clique em "Search". Deverá ver a sua mensagem 🎉

Parabéns, enviou agora a sua primeira mensagem para o Graylog! Sinta-se à vontade para criar entradas e dashboards adicionais adaptados às suas necessidades. Para mais orientações, pode achar útil a documentação oficial do Graylog.

Vários exemplos de código estão disponíveis no nosso repositório Git. Este repositório oferece implementações práticas e personalizações adicionais para o ajudar a tirar o máximo proveito do Graylog.

Se tiver um cliente rsyslog e quiser enviar logs de forma segura para o Graylog, siga estes passos:

Não ative nenhuma opção TLS na entrada do Graylog. O TLS será gerido diretamente por um proxy reverso na sua instância para que o Graylog não o trate.

  1. Vá à configuração do seu serviço Graylog no painel Stackhero e ative "TLS encryption" para a porta Syslog TCP 514.

  2. Atualize a sua configuração rsyslog conforme indicado abaixo. Substitua <XXXXXX>.stackhero-network.com pelo nome do host da sua instância:

    # Definir certificado CA TLS
    global(
      DefaultNetstreamDriver="gtls"
      DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-certificates.crt"
    )
    
    # Enviar todos os logs para um servidor remoto
    # Uma fila em disco é criada para esta ação. Se o host remoto estiver
    # offline, as mensagens são colocadas em fila no disco e enviadas quando voltar a estar disponível
    # Veja https://www.rsyslog.com/doc/v8-stable/configuration/actions.html
    # e https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfwd.html
    *.* action(
      type="omfwd"
      target="<XXXXXX>.stackhero-network.com"
      port="514"
      protocol="tcp"
      KeepAlive="on"
      KeepAlive.Interval="30"
      StreamDriver="gtls"
      StreamDriverMode="1"
      StreamDriverAuthMode="x509/name"
      ResendLastMSGOnReconnect="on"
      queue.filename="fwdRule1"  # prefixo de nome único para ficheiros de spool
      queue.type="LinkedList"
      queue.maxDiskSpace="256m"
      queue.saveOnShutdown="on"
      action.resumeRetryCount="-1"
      action.resumeInterval="30"
    )
    
  3. Reinicie o seu serviço rsyslog e verifique a configuração enviando um log com o comando:

    logger This is a test
    

Isto completa a configuração. Está agora a enviar logs de forma segura para o Graylog usando encriptação TLS!

Pode encontrar um erro como:

org.opensearch.index.mapper.MapperParsingException: failed to parse field [time] of type [long] in document with id 'xxxx'

Pode ver este erro nos logs fornecidos no painel Stackhero ou no painel de administração do Graylog em System > Overview > Indexer failures.

Este erro indica que um log foi enviado com um valor para o campo time que não corresponde ao tipo esperado (neste caso, um valor numérico do tipo "long"). O Graylog utiliza a funcionalidade de mapeamento dinâmico do OpenSearch. Quando um log é enviado pela primeira vez, o OpenSearch tenta adivinhar os tipos de campos. Por exemplo, se um log incluir o campo time com o valor numérico 1234, o OpenSearch define-o como um campo numérico. Se outro log for enviado com o campo time definido como "abcd", uma string, o OpenSearch irá rejeitá-lo porque espera um valor numérico.

Lembre-se de que o nome do campo time é usado apenas para ilustração. Pode ser qualquer nome de campo e tipo.

Para resolver este problema, precisa de redefinir o tipo que o OpenSearch espera. Para mais informações, consulte a documentação oficial do Graylog.

Antes de prosseguir, ative o acesso ao OpenSearch no painel Stackhero. Navegue até ao seu serviço Graylog e clique no botão "Configure" para ativar o acesso ao OpenSearch.

Tenha cuidado com estas alterações, pois configurações incorretas podem bloquear o seu cluster OpenSearch e potencialmente resultar em perda de dados. Se não tiver certeza, não prossiga.

  1. Defina o seu novo mapeamento. Neste exemplo, redefinimos o campo time para ser do tipo string. Pode encontrar os tipos disponíveis na documentação dos tipos de campos do OpenSearch.

  2. Guarde o seguinte conteúdo num ficheiro chamado graylog-custom-mapping.json:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. Envie este ficheiro usando o seguinte comando curl (substitua <XXXXXX>.stackhero-network.com pelo nome de domínio da sua instância):

    curl -u 'admin' -X PUT -d @'graylog-custom-mapping.json' -H 'Content-Type: application/json' 'https://<XXXXXX>.stackhero-network.com/opensearch/_template/graylog-custom-mapping?pretty'
    

    Deverá receber uma resposta como:

    {
      "acknowledged": true
    }
    
  4. Finalmente, verifique se o mapeamento foi atualizado com este comando (substitua o domínio conforme necessário):

    curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'
    

Lidar com o erro "Unable to write audit log entry"

Se vir um erro como:

Unable to write audit log entry because there is no valid license

ou

Not running cleanup for auditlog entries in MongoDB because there is no valid license

isto ocorre porque o Graylog Enterprise foi ativado sem uma licença válida. Se tiver uma licença, pode inseri-la na interface do Graylog. Se não tiver uma licença, simplesmente desative o Graylog Enterprise no painel Stackhero.