Lectura de Logs de IIS para generar Dashboards en Grafana

Hola
Estoy desplegando un PoC de grafana, Loki y Alloy.
Para realizar la ingesta de log transaccionales de IIS para geenrar Dashboard en Grafana, estoy configurando Alloy. Estoy tratando de generar etiquetas y/o labels para facilitar la consulta y generacion del Dashboar den Grafana. El codigo usado en alloy es el siguiente para leer el log de IIS

/*
logging {
  level = "debug"
}
*/

livedebugging {
  enabled = true
}

local.file_match "iis_logs" {
  path_targets = [
    {
      "__path__" = "C:/inetpub/logs/LogFiles/W3SVC1/*.log",
      "job"      = "IIS_Default",
      "hostname" = "VMDC",
      "site"     = "Default Web Site",
    },
  ]
}

loki.source.file "iis_logs" {
  targets        = local.file_match.iis_logs.targets
  tail_from_end  = true
  encoding       = "utf-8"
  forward_to     = [loki.process.iis_parser.receiver]
}


loki.process "iis_parser" {

 
  stage.regex {
      expression = "^(?P<date>\\d{4}-\\d{2}-\\d{2}) (?P<time>\\d{2}:\\d{2}:\\d{2}) (?P<server_ip>(::1)|((([a-fA-F0-9]{1,4}:){1,7}[a-fA-F0-9]{1,4})|(::([a-fA-F0-9]{1,4}:){0,5}[a-fA-F0-9]{1,4})|(([a-fA-F0-9]{1,4}:){1,6}:))) (?P<method>\\w{3,10}) (?P<uri_stem>\\/\\S{0,1000}) (?P<uri_query>-|\\S*) (?P<port>\\d{2,5}) (?P<user>-|\\S*) (?P<client_ip>\\b(::1)|(([0-9]{1,3}\\.){3}[0-9]{1,3})|(([a-fA-F0-9]{0,4}:){2,7}[a-fA-F0-9]{0,4})\\b) (?P<user_agent>\\S{0,1000}) (?P<referer>-|http[s]?:\\/\\/\\S{0,})? (?P<status>\\d{3}) (?P<substatus>\\d{1,5}) (?P<win32_status>\\d{1,5}) (?P<time_taken>\\d{1,100})$"
  }

  stage.drop {
    expression = "^#Software:*"
  }
  stage.drop {
    expression = "^#Version:*"
  }
  stage.drop {
    expression = "^#Date:*"
  }
  stage.drop {
    expression = "^#Fields:*"
  }
 
 stage.timestamp {
    source = "date"
    format = "2006-01-02"
  }

  stage.timestamp {
    source = "time"
    format = "15:04:05"
  }
  

  stage.labels {
    values = {
      status    = "",
      method    = "",
      uri_stem  = "",
      client_ip = "",
    }
  }

  forward_to = [loki.write.local.receiver]
}

loki.echo "debug" { }

loki.write "local" {
  endpoint {
    url = "http://localhost:3100/loki/api/v1/push"
  }
}

Uso algo similar para leer el log desde los eventos de Windows, teniendo el mismo resultado.

Tienen alguna sugerencia o documentacion qu me peuda guiar para generar esto

Gracias

Welcome @jakicl

¿Podrías proporcionarnos un ejemplo de archivo de registro de IIS?

192.168.114.201, -, 03/20/01, 7:55:20, W3SVC2, SALES1, 172.21.13.45, 4502, 163, 3223, 200, 0, GET, /DeptLogo.gif, -, 
172.16.255.255, anonymous, 03/20/01, 23:58:11, MSFTPSVC, SALES1, 172.16.255.255, 60, 275, 0, 0, 0, PASS, /Intro.htm, -, 

Hola @yosiasz.
Adjunto lineas generadas en el log de iis

#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2025-05-25 09:49:39 10.2.0.4 GET / - 80 - 10.2.0.4 Mozilla/5.0+(Windows+NT;+Windows+NT+10.0;+en-US)+WindowsPowerShell/5.1.20348.2849 - 200 0 0 2317
2025-05-25 09:50:00 10.2.0.4 GET / - 80 - 10.2.0.4 Mozilla/5.0+(Windows+NT;+Windows+NT+10.0;+en-US)+WindowsPowerShell/5.1.20348.2849 - 200 0 0 0
2025-05-25 09:50:08 10.2.0.4 GET / - 80 - 10.2.0.4 Mozilla/5.0+(Windows+NT;+Windows+NT+10.0;+en-US)+WindowsPowerShell/5.1.20348.2849 - 200 0 0 13
2025-05-25 09:50:08 10.2.0.4 GET / - 80 - 10.2.0.4 Mozilla/5.0+(Windows+NT;+Windows+NT+10.0;+en-US)+WindowsPowerShell/5.1.20348.2849 - 200 0 0 11

Usando Loki.proccess remuevo las lineas que inician con #, las cuales son propias del log cuando comentarea el inicio de escritura

1 Like

¿conseguiste finalmente hacerlo? Estoy tratando de personalizar este dashboard de nginx Web Analytics Dashboard (for onboarding) | Grafana Labs a IIS y me vendría de perlas; pero no veo esos estados por ningún lado utilizando tu config.alloy

Gracias

HOla.
Gracias por la respuesta.
Estoy usando otro dashboard para Nginx, pero tengo inconveniente al momento de poder identificar los datos usando labels o etiquetas. AL leer e log de IIS, no logro separar los datos tal como IP origen, URI stream, status http entre otros. Esto y manejando consultas de texto, pero esto es muy limitado para poder hacer las consultas mas dinamicas