Graylog: Primeiros passos

Como começar a utilizar 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!

Um input é o ponto de entrada onde o Graylog recebe os seus logs. Pode enviar logs através de TCP ou UDP. Além disso, o Graylog pode recolher registos a partir de uma API, de uma fila Kafka, de um servidor RabbitMQ e por outros métodos.

Neste exemplo, vamos criar um input UDP bruto. 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 o seu input com os seguintes valores e valide o formulário:

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

De 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

Depois de enviar a mensagem, volte ao Graylog e clique em "Search". Deverá ver a sua mensagem 🎉

Parabéns, acabou de enviar a sua primeira mensagem para o Graylog! Sinta-se à vontade para criar inputs e dashboards adicionais adaptados às suas necessidades. Para mais informações, consulte 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 partido do Graylog.

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

Não ative nenhuma opção de TLS no input do Graylog. O TLS será gerido diretamente por um reverse proxy na sua instância, pelo que o Graylog não irá tratar deste processo.

  1. Aceda à configuração do seu serviço Graylog no dashboard da Stackhero e ative a "encriptação TLS" para a porta Syslog TCP 514.

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

    # Definir o certificado CA TLS
    global(
      DefaultNetstreamDriver="gtls"
      DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-certificates.crt"
    )
    
    # Enviar todos os logs para um servidor remoto
    # É criada uma fila em disco para esta ação. Se o host remoto estiver
    # indisponível, as mensagens são armazenadas em disco e enviadas assim que voltar a estar acessível
    # Consulte 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 único para ficheiros de spool
      queue.type="LinkedList"
      queue.maxDiskSpace="256m"
      queue.saveOnShutdown="on"
      action.resumeRetryCount="-1"
      action.resumeInterval="30"
    )
    
  3. Reinicie o serviço rsyslog e verifique a configuração enviando um log com o seguinte comando:

    logger This is a test
    

A configuração está concluída. Está agora a enviar logs de forma segura para o Graylog através de TLS!

Poderá encontrar um erro como:

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

Pode consultar este erro nos logs disponíveis no dashboard da Stackhero ou no painel de administração do Graylog em System > Overview > Indexer failures.

Este erro indica que foi enviado um log 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 o tipo dos 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.

Tenha em atenção que o nome do campo time é apenas um exemplo. Pode tratar-se de qualquer nome de campo e tipo.

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

Antes de avançar, ative o acesso ao OpenSearch no dashboard da Stackhero. Aceda ao seu serviço Graylog e clique no botão "Configurar" para ativar o acesso ao OpenSearch.

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

  1. Defina o seu novo mapping. Neste exemplo, redefinimos o campo time para ser do tipo string. Pode consultar os tipos disponíveis na documentação dos tipos de campo 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 utilizando o seguinte comando curl (substitua <XXXXXX>.stackhero-network.com pelo 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 semelhante a:

    {
      "acknowledged": true
    }
    
  4. Por fim, verifique se o mapping 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'
    

Resolver o erro "Unable to write audit log entry"

Se visualizar 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 acontece 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 licença, basta desativar o Graylog Enterprise no dashboard da Stackhero.