diff --git a/config/prod.exs b/config/prod.exs index 5e0f75d4..2ce803df 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -1,11 +1,15 @@ import Config -# Filter out harmless Oban shutdown messages during deployments +# Filter out harmless Oban shutdown messages and repetitive SNMP MIB errors config :logger, :default_handler, filters: [ drop_oban_shutdown: { &Towerops.LoggerFilters.drop_oban_shutdown/2, [] + }, + drop_snmp_mib_errors: { + &Towerops.LoggerFilters.drop_snmp_mib_errors/2, + [] } ] diff --git a/lib/towerops/logger_filters.ex b/lib/towerops/logger_filters.ex index 47c0c015..b7e1732f 100644 --- a/lib/towerops/logger_filters.ex +++ b/lib/towerops/logger_filters.ex @@ -42,4 +42,25 @@ defmodule Towerops.LoggerFilters do String.contains?(msg, "EXIT") and String.contains?(msg, ":shutdown") end + + @doc """ + Drops repetitive SNMP MIB resolution errors from net-snmp library. + + These errors occur when snmptranslate can't find vendor-specific MIB modules. + The errors are logged repeatedly during polling but don't affect functionality + since the system falls back to numeric OIDs. + + Example messages filtered: + - "Cannot find module (TRISTAR): At line 1 in (none)" + - "Cannot find module (VENDOR-MIB): At line 1 in (none)" + """ + def drop_snmp_mib_errors(log_event, _opts) do + if snmp_mib_error?(log_event), do: :stop, else: :ignore + end + + defp snmp_mib_error?(%{msg: {:string, msg}}) when is_binary(msg) do + String.contains?(msg, "Cannot find module") and String.contains?(msg, "At line 1 in (none)") + end + + defp snmp_mib_error?(_), do: false end