diff --git a/roles/telegraf/handlers/main.yml b/roles/telegraf/handlers/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..358f66089d37426ab8e5f1e5e882c367d424a135
--- /dev/null
+++ b/roles/telegraf/handlers/main.yml
@@ -0,0 +1,5 @@
+- name: restart telegraf
+  service:
+    name: telegraf
+    state: restarted
+  become: true
diff --git a/roles/telegraf/tasks/main.yml b/roles/telegraf/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..df2e976eb8320de4d59b42c04b5c6207f2ab19c9
--- /dev/null
+++ b/roles/telegraf/tasks/main.yml
@@ -0,0 +1,37 @@
+- name: Install Telegraf from URL [RHEL/CentOS]
+  yum:
+    name: "{{ telegraf_install_rpm_url }}"
+    state: present
+  when: ansible_os_family == "RedHat"
+  become: true
+  become_user: root
+
+- name: Download Telegraf package via URL [Debian/Ubuntu]
+  get_url:
+    url: "{{ telegraf_install_url }}"
+    dest: /tmp/telegraf-ansible-download.deb
+  when: ansible_os_family == "Debian"
+  become: true
+  become_user: root
+
+- name: Install Telegraf package
+  apt:
+    deb: /tmp/telegraf-ansible-download.deb
+    state: present
+  when: ansible_os_family == "Debian"
+  become: true
+  become_user: root
+
+- name: Install Telegraf config
+  template:
+    src: telegraf.conf.j2
+    dest: /etc/telegraf/telegraf.conf
+    owner: telegraf
+    group: telegraf
+    mode: '640'
+  notify:
+    - "restart telegraf"
+  become: true
+  become_user: root
+
+
diff --git a/roles/telegraf/templates/telegraf.conf.j2 b/roles/telegraf/templates/telegraf.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..f25fda3c9389f6a18c83ad6890165b078d957017
--- /dev/null
+++ b/roles/telegraf/templates/telegraf.conf.j2
@@ -0,0 +1,117 @@
+# Telegraf configuration
+
+# Telegraf is entirely plugin driven. All metrics are gathered from the
+# declared inputs, and sent to the declared outputs.
+
+# Plugins must be declared in here to be active.
+# To deactivate a plugin, comment out the name and any variables.
+
+# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
+# file would generate.
+
+# Global tags can be specified here in key="value" format.
+[tags]
+  # dc = "us-east-1" # will tag all metrics with dc=us-east-1
+  # rack = "1a"
+
+# Configuration for telegraf agent
+[agent]
+  # Default data collection interval for all plugins
+  interval = "10s"
+  # Rounds collection interval to 'interval'
+  # ie, if interval="10s" then always collect on :00, :10, :20, etc.
+  round_interval = true
+
+  # Default data flushing interval for all outputs. You should not set this below
+  # interval. Maximum flush_interval will be flush_interval + flush_jitter
+  flush_interval = "60s"
+  # Jitter the flush interval by a random amount. This is primarily to avoid
+  # large write spikes for users running a large number of telegraf instances.
+  # ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
+  flush_jitter = "5s"
+
+  # Run telegraf in debug mode
+  debug = false
+  # Override default hostname, if empty use os.Hostname()
+  hostname = ""
+
+
+###############################################################################
+#                                  OUTPUTS                                    #
+###############################################################################
+
+# Configuration for influxdb server to send metrics to
+[[outputs.influxdb]]
+  # The full HTTP or UDP endpoint URL for your InfluxDB instance.
+  # Multiple urls can be specified but it is assumed that they are part of the same
+  # cluster, this means that only ONE of the urls will be written to each interval.
+  # urls = ["udp://localhost:8089"] # UDP endpoint example
+  urls = ["{{ influxdb_server }}"] # required
+  # The target database for metrics (telegraf will create it if not exists)
+  database = "telegraf" # required
+  # Precision of writes, valid values are n, u, ms, s, m, and h
+  # note: using second precision greatly helps InfluxDB compression
+  precision = "s"
+
+  # Connection timeout (for the connection with InfluxDB), formatted as a string.
+  # If not provided, will default to 0 (no timeout)
+  # timeout = "5s"
+  # username = "telegraf"
+  # password = "metricsmetricsmetricsmetrics"
+  username = "{{ influxdb_user }}" 
+  password = "{{ influxdb_password }}"
+  # Set the user agent for HTTP POSTs (can be useful for log differentiation)
+  # user_agent = "telegraf"
+  # Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
+  # udp_payload = 512
+
+
+###############################################################################
+#                                  INPUTS                                     #
+###############################################################################
+
+# Read metrics about cpu usage
+[[inputs.cpu]]
+  # Whether to report per-cpu stats or not
+  percpu = true
+  # Whether to report total system cpu stats or not
+  totalcpu = true
+  # Comment this line if you want the raw CPU time metrics
+  drop = ["time_*"]
+
+# Read metrics about disk usage by mount point
+[[inputs.disk]]
+  # By default, telegraf gather stats for all mountpoints.
+  # Setting mountpoints will restrict the stats to the specified mountpoints.
+  # mount_points=["/"]
+
+# Read metrics about disk IO by device
+[[inputs.diskio]]
+  # By default, telegraf will gather stats for all devices including
+  # disk partitions.
+  # Setting devices will restrict the stats to the specified devices.
+  # devices = ["sda", "sdb"]
+  # Uncomment the following line if you do not need disk serial numbers.
+  # skip_serial_number = true
+
+# Read metrics about memory usage
+[[inputs.mem]]
+  # no configuration
+
+# Read metrics about swap memory usage
+[[inputs.swap]]
+  # no configuration
+
+# Read metrics about system load & uptime
+[[inputs.system]]
+  # no configuration
+
+[[inputs.net]]
+  # no configuration
+ 
+[[inputs.netstat]]
+  # no configuration
+
+###############################################################################
+#                              SERVICE INPUTS                                 #
+###############################################################################
diff --git a/roles/telegraf/vars/main.yml b/roles/telegraf/vars/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9e2c5c5a63f1ee5de9e6f2d53201c615997dc187
--- /dev/null
+++ b/roles/telegraf/vars/main.yml
@@ -0,0 +1,2 @@
+telegraf_install_rpm_url: https://dl.influxdata.com/telegraf/releases/telegraf-1.12.6-1.x86_64.rpm
+telegraf_install_deb_url: https://dl.influxdata.com/telegraf/releases/telegraf_1.12.6-1_amd64.deb