diff --git a/telegraf/files/script/reclass_monitor.py b/telegraf/files/script/reclass_monitor.py
new file mode 100644
index 0000000..c209ae9
--- /dev/null
+++ b/telegraf/files/script/reclass_monitor.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+import argparse
+import subprocess
+import sys
+
+def call_process(*args, **kwargs):
+    _result = subprocess.check_output(*args, **kwargs)
+    return _result.decode("utf-8") if sys.version_info.major > 2 else _result
+
+def parse_args():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--git-dir", default="/srv/salt/reclass")
+    parser.add_argument("--remote", default="origin")
+    parser.add_argument("--branch", default="master")
+    return parser.parse_args()
+
+CHANGES_FORMAT = '''reclass_staged_changes,directory={dir} value={staged}
+reclass_unstaged_changes,directory={dir} value={unstaged}'''
+
+if __name__ == "__main__":
+    args = parse_args()
+    git_dir = args.git_dir.strip()
+
+    staged, unstaged = [], []
+    for file_status in call_process(
+        str.split('git status --porcelain'), cwd=git_dir
+    ).splitlines():
+        if file_status[0] not in (' ', '?'):
+            staged.append(file_status[3:].strip())
+        if file_status[1] != ' ':
+            unstaged.append(file_status[3:].strip())
+
+    print(CHANGES_FORMAT.format(
+        dir=git_dir, staged=len(staged), unstaged=len(unstaged)
+    ))
+
+    if args.remote.strip() in call_process(
+        str.split('git remote show'), cwd=git_dir
+    ).splitlines():
+        # 0 if local branch is synced with remote, 1 otherwise
+        print('reclass_remote_desync,directory={dir} value={val}'.format(
+            dir=git_dir, val=int(bool(call_process(
+                str.split("git diff {branch}..{remote}/{branch}".format(
+                    branch=args.branch.strip(), remote=args.remote.strip()
+                )), cwd=git_dir
+            )))
+        ))
diff --git a/telegraf/meta/prometheus.yml b/telegraf/meta/prometheus.yml
index ae9742c..c7bc0fd 100644
--- a/telegraf/meta/prometheus.yml
+++ b/telegraf/meta/prometheus.yml
@@ -36,6 +36,46 @@
         summary: "Telegraf failed to gather metrics"
         description: "Telegraf has gathering errors on the {{ $labels.host }} node for the last 10 minutes."
 {%- endraw %}
+{%- if pillar.reclass is defined %}
+  {%- if pillar.reclass.get('storage', {}).get('enabled', False) and pillar.reclass.get('storage', {}).get('data_source',{}).get('engine',"") == "local" %}
+    ReclassUnstagedChanges:
+      if: >-
+        reclass_files_unstaged_changes > 0
+      for: 30m
+      labels:
+        severity: warning
+        service: reclass
+      annotations:
+        summary: 'Reclass model has been modified'
+        {%- raw %}
+        description: '{{ $labels.value }} files under {{ $labels.directory }} have been modified without being committed'
+        {%- endraw %}
+    ReclassStagedChanges:
+      if: >-
+        reclass_files_staged_changes > 0
+      for: 30m
+      labels:
+        severity: warning
+        service: reclass
+      annotations:
+        summary: 'Reclass model has diverged from expected local state'
+        {%- raw %}
+        description: '{{ $labels.value }} files under {{ $labels.directory }} have diverged from expected local state'
+        {%- endraw %}
+    ReclassRemoteDesync:
+      if: >-
+        reclass_remote_desync > 0
+      for: 30m
+      labels:
+        severity: warning
+        service: reclass
+      annotations:
+        summary: 'Local Reclass model state has diverted from remote state'
+        {%- raw %}
+        description: '{{ $labels.value }} local files under {{ $labels.directory }} have diverged from expected remote state'
+        {%- endraw %}
+  {%- endif %}
+{%- endif %}
 {%- if pillar.neutron is defined %}
   {%- if pillar.neutron.get('gateway', {}).get('enabled', False) == True or pillar.neutron.get('compute',{}).get('enabled', False) == True %}
 {%- raw %}
diff --git a/telegraf/meta/telegraf.yml b/telegraf/meta/telegraf.yml
index 6a7dda7..df55923 100644
--- a/telegraf/meta/telegraf.yml
+++ b/telegraf/meta/telegraf.yml
@@ -1,3 +1,17 @@
+{%- if pillar.reclass is defined %}
+  {%- if pillar.reclass.get('storage', {}).get('enabled', False) and pillar.reclass.get('storage', {}).get('data_source',{}).get('engine',"") == "local" %}
+    {%- set reclass_dir = pillar.reclass.get('storage', {}).get('base_dir',"") %}
+agent:
+  input:
+    reclass_git:
+      template: telegraf/files/input/exec.conf
+      commands:
+      - /usr/local/bin/reclass_monitor.py --git-dir {{ reclass_dir }}
+      data_format: influx
+      interval: 45s
+  {%- endif %}
+{%- endif %}
+
 {%- if pillar.neutron is defined %}
   {%- if pillar.neutron.get('gateway', {}).get('enabled', False) == True or pillar.neutron.get('compute',{}).get('enabled', False) == True %}
 agent:
diff --git a/telegraf/script.sls b/telegraf/script.sls
index cb72478..79342b5 100644
--- a/telegraf/script.sls
+++ b/telegraf/script.sls
@@ -1,3 +1,16 @@
+{%- if pillar.reclass is defined %}
+  {%- if pillar.reclass.get('storage', {}).get('enabled', False) and pillar.reclass.get('storage', {}).get('data_source',{}).get('engine',"") == "local" %}
+
+reclass_monitor_telegraf_script:
+  file.managed:
+  - name: /usr/local/bin/reclass_monitor.py
+  - source: salt://telegraf/files/script/reclass_monitor.py
+  - template: jinja
+  - mode: 755
+
+  {%- endif %}
+{%- endif %}
+
 {%- if pillar.neutron is defined %}
   {%- if pillar.neutron.get('gateway', {}).get('enabled', False) == True or pillar.neutron.get('compute',{}).get('enabled', False) == True %}
 ovs_parse_bridge:
