diff --git a/simplemonitor/monitor.py b/simplemonitor/monitor.py
index 8b859a4..e1b264b 100644
--- a/simplemonitor/monitor.py
+++ b/simplemonitor/monitor.py
@@ -502,6 +502,9 @@ def main() -> None:
             remote_port = int(config.get("monitor", "remote_port"))
     key = config.get("monitor", "key", fallback=None)
 
+    if not m.verify_alerting():
+        main_logger.critical("No alerters defined and no remote logger found")
+
     if options.test:
         main_logger.warning("Config test complete. Exiting.")
         sys.exit(0)
diff --git a/simplemonitor/simplemonitor.py b/simplemonitor/simplemonitor.py
index b522874..fbdb3dd 100644
--- a/simplemonitor/simplemonitor.py
+++ b/simplemonitor/simplemonitor.py
@@ -71,6 +71,17 @@ class SimpleMonitor:
                     ok = False
         return ok
 
+    def verify_alerting(self) -> bool:
+        """Sanity check the configuration to see if we have at least an alerter, or network logging."""
+        sane = True
+        if len(self.alerters) == 0:
+            for _, logger in self.loggers.items():
+                if logger._type == "network":
+                    break
+            else:
+                sane = False
+        return sane
+
     def sort_joblist(self, joblist: List[str]) -> List[str]:
         """Order a list of monitors so that compound monitors are at the end"""
         new_list = []  # type: List[str]

Offer warning if no alerter config is found
If a config is loaded with no alerters and no remote logger, and maybe other configurations, warn at startup that alerts will not be sent.
diff --git a/tests/test_main.py b/tests/test_main.py
index a3e3255..4527da5 100644
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -8,7 +8,8 @@ import time
 import unittest
 from unittest.mock import patch
 
-from simplemonitor import monitor
+from simplemonitor import Alerters, monitor, simplemonitor
+from simplemonitor.Loggers import network
 
 
 class TestMonitor(unittest.TestCase):
@@ -40,3 +41,19 @@ class TestMonitor(unittest.TestCase):
             "check_hup_file should not have triggered",
         )
         os.unlink(temp_file_name)
+
+
+class TestSanity(unittest.TestCase):
+    def test_config_has_alerting(self):
+        m = simplemonitor.SimpleMonitor()
+        self.assertFalse(m.verify_alerting())
+
+        m.add_alerter("testing", Alerters.alerter.Alerter({}))
+        self.assertTrue(m.verify_alerting())
+
+        m = simplemonitor.SimpleMonitor()
+        m.add_logger(
+            "testing",
+            network.NetworkLogger({"host": "localhost", "port": 1234, "key": "hello"}),
+        )
+        self.assertTrue(m.verify_alerting())

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest freezegun
apt-get update apt-get install -y gcc
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
boto3==1.37.23
botocore==1.37.23
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
colorlog==6.9.0
cryptography==44.0.2
exceptiongroup==1.2.2
freezegun==1.5.1
idna==3.10
iniconfig==2.1.0
jmespath==1.0.1
packaging==24.2
paho-mqtt==2.1.0
pluggy==1.5.0
psutil==7.0.0
pycparser==2.22
pyOpenSSL==25.0.0
pytest==8.3.5
python-dateutil==2.9.0.post0
requests==2.32.3
s3transfer==0.11.4
-e git+https://github.com/jamesoff/simplemonitor.git@b0a91683117d87fcf04bbd0bd53f99d65957a670#egg=simplemonitor
six==1.17.0
tomli==2.2.1
typing_extensions==4.13.0
urllib3==1.26.20

name: simplemonitor
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - boto3==1.37.23
      - botocore==1.37.23
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - colorlog==6.9.0
      - cryptography==44.0.2
      - exceptiongroup==1.2.2
      - freezegun==1.5.1
      - idna==3.10
      - iniconfig==2.1.0
      - jmespath==1.0.1
      - packaging==24.2
      - paho-mqtt==2.1.0
      - pluggy==1.5.0
      - psutil==7.0.0
      - pycparser==2.22
      - pyopenssl==25.0.0
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - requests==2.32.3
      - s3transfer==0.11.4
      - six==1.17.0
      - tomli==2.2.1
      - typing-extensions==4.13.0
      - urllib3==1.26.20
prefix: /opt/conda/envs/simplemonitor

tests/test_main.py::TestSanity::test_config_has_alerting
tests/test_main.py::TestMonitor::test_MonitorConfigInterval tests/test_main.py::TestMonitor::test_file_hup
simplemonitor/monitor.py simplemonitor/simplemonitor.py
simplemonitor/monitor.py simplemonitor/simplemonitor.py