Prometheus Exporter Nginxlog Help Please!

I cannot get this to work! I’m looking at the page at Github for the maintainer and for the life of me I can’t figure out what I’m doing wrong. It seems like the configuration out of nixs is being built incorrectly you’ll have to apologize for my ineptitude is at these things I’m a network guy. to anyone’s got as far thank you!

     services.prometheus.exporters.nginxlog ={
      enable = true;
      settings = {
      consul.enable = false;
        namespaces.name = "fmd";
          namespaces.format = "\$\remote_addr - \$\remote_user [\$\time_local] \"\$\request\" \$\status \$\body_bytes_sent \"\$\http_referer\" \"\$\http_user_agent\" \"\$\http_x_forwarded_for\"";
            namespaces.source.files = "/var/log/nginx/access.log";


Here is the config Nix is building

{"consul":{"enable":false},"listen":{"address":"0.0.0.0","metrics_endpoint":"/metrics","port":9117},"namespaces":{"format":"$\remote_addr - $\remote_user [$\time_local] \"$\request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\" \"$http_x_forwarded_for\"","name":"fmd","source":{"files":"/var/log/nginx/access.log"}}}

Other Logs

ay 17 00:53:27 webnix prometheus-nginxlog-exporter[54517]:         runtime/proc.go:267
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Main process exited, code=exited, status=1/FAILURE
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Failed with result 'exit-code'.
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Scheduled restart job, restart counter is at 4.
May 17 00:53:27 webnix systemd[1]: Started prometheus-nginxlog-exporter.service.
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]: 2024-05-17T00:53:27.448-0600        info        prometheus-nginxlog-exporter/main.go:162        loading configuration file /nix/store/njc3m4kckjg44qgk88d3y9mbs38z0wyc-nginxlog-exporter.yaml
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]: 2024-05-17T00:53:27.449-0600        fatal        prometheus-nginxlog-exporter/main.go:164        yaml: unmarshal errors:
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]:   line 1: cannot unmarshal !!map into []config.NamespaceConfig
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]: main.loadConfig
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]:         github.com/martin-helmich/prometheus-nginxlog-exporter/main.go:164
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]: main.main
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]:         github.com/martin-helmich/prometheus-nginxlog-exporter/main.go:117
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]: runtime.main
May 17 00:53:27 webnix prometheus-nginxlog-exporter[54529]:         runtime/proc.go:267
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Main process exited, code=exited, status=1/FAILURE
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Failed with result 'exit-code'.
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Scheduled restart job, restart counter is at 5.
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Start request repeated too quickly.
May 17 00:53:27 webnix systemd[1]: prometheus-nginxlog-exporter.service: Failed with result 'exit-code'.
May 17 00:53:27 webnix systemd[1]: Failed to start prometheus-nginxlog-exporter.service.
May 17 01:41:24 webnix systemd[1]: Started prometheus-nginxlog-exporter.service.
lines 1-69

I’d guess the problem is with your escapes. You don’t need to escape $ (if it’s not followed by {), and using '' instead of " for strings is easier if you’re going to have " in the string.

Here’s my config for reference: tlaternet-server/exporters.nix at master - tlaternet-server - Forgejo: Beyond coding. We Forge.

Edit: Ah, also namespaces should be a list:

services.prometheus.exporters.nginxlog = {
  enable = true;
  settings = {
    consul.enable = false;
    namespaces = [{
      name = "fmd";
      # Sorry, I'm not going to make this readable for you
      format = "\$\remote_addr - \$\remote_user [\$\time_local] \"\$\request\" \$\status \$\body_bytes_sent \"\$\http_referer\" \"\$\http_user_agent\" \"\$\http_x_forwarded_for\"";
      source.files = [ "/var/log/nginx/access.log" ] ;
    }];
  };
};

Thank you for the information I can’t test it right now but I will and let you know thank you so much!

For Posterity

 appendHttpConfig = ''
    log_format custom  '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';

      services.prometheus.exporters.nginxlog ={
      enable = true;
      group = "nginx";
      settings = {
      consul.enable = false;
      namespaces = [{
        name = "fmd";
        format = lib.concatStringsSep " " [
              "$remote_addr - $remote_user [$time_local]"
              ''"$request" $status $body_bytes_sent''
              ''"$http_referer" "$http_user_agent" "$http_x_forwarded_for"''
              ''rt=$request_time uct="$upstream_connect_time"''
              ''uht="$upstream_header_time" urt="$upstream_response_time"''
            ];
       source.files = [ "/var/log/nginx/access.log" ];
   }];
  };


1 Like