diff --git a/docker-compose.yml b/docker-compose.yml
index 1284f27b312cca56a66cabc845340534b745f2bd..1922b00352cc0bf79c893703a1d03dc8d1c76df8 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,20 +1,36 @@
 version: '3'
 volumes:
-  persitent-storage:
+  influxdb-storage:
+  grafana-storage:
 services:
   influxdb:
     image: influxdb:1.7
     restart: always
+    ports:
+      - "8086:8086"
+    volumes:
+      - 'influxdb-storage:/var/lib/influxdb'
   grafana:
     image: grafana/grafana:5.4.3
     restart: always
     ports:
       - "3000:3000"
     volumes:
-      - 'persitent-storage:/var/lib/grafana'
+      - 'grafana-storage:/var/lib/grafana'
       - ./grafana/provisioning/:/etc/grafana/provisioning/
     env_file:
       - ./grafana/config.monitoring
+  influx_to_csv:
+    build: ./influxdb
+    restart: always
+    volumes:
+      - ./data/:/var/lib/csv/
+    environment:
+      - INFLUX_HOST=influxdb
+      - CSV_FOLDER_PATH=/var/lib/csv/
+    depends_on:
+      - influxdb
+      - grafana
   cpu_load:
     build: ./sensors/cpu_load
     restart: always
diff --git a/influxdb/Dockerfile b/influxdb/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..df44a8293503bb1ef75d78afdd7bcfc1f8aa5dcb
--- /dev/null
+++ b/influxdb/Dockerfile
@@ -0,0 +1,10 @@
+FROM python:3
+
+RUN mkdir -p /usr/src/app
+WORKDIR /usr/src/app
+
+COPY requirements.txt /usr/src/app
+RUN python3 -m pip install -r requirements.txt
+
+COPY influx_to_csv.py /usr/src/app
+CMD ["python3", "/usr/src/app/influx_to_csv.py"]
\ No newline at end of file
diff --git a/influxdb/influx_to_csv.py b/influxdb/influx_to_csv.py
new file mode 100644
index 0000000000000000000000000000000000000000..e8a6067f3e7aae1ed6cb63f31c85f9fd030d2182
--- /dev/null
+++ b/influxdb/influx_to_csv.py
@@ -0,0 +1,45 @@
+import time
+import os
+from datetime import datetime, timedelta
+from pathlib import Path
+import csv
+
+from influxdb import InfluxDBClient
+
+influx_host = os.getenv("INFLUX_HOST", "localhost")
+influx_client = InfluxDBClient(host=influx_host, database="cpu-sense")
+influx_client.create_database("cpu-sense")
+
+write_time_interval = 20
+start_time = datetime.utcnow()
+begin = start_time - timedelta(seconds=100)
+end = begin + timedelta(seconds=write_time_interval)
+
+csv_folder_path = os.getenv("CSV_FOLDER_PATH", "./data")
+data_folder = Path(csv_folder_path)
+data_folder.mkdir(parents=True, exist_ok=True)
+
+while True:
+    begin += timedelta(seconds=write_time_interval)
+    end += timedelta(seconds=write_time_interval)
+    query = 'select * from "CPU Usage" where time > \'' + begin.isoformat() + "Z' AND time <= '" + end.isoformat() + "Z' tz('Europe/Paris')"
+    result = influx_client.query(query, epoch="ms")
+
+    try:
+        n = next(result.get_points())
+    except StopIteration:
+        print('Influxdb result query is empty')
+    else:
+        file_date = datetime.now().strftime('%Y_%m_%d_%H_%M')
+        file_name = data_folder/str('cpu_data_' + file_date + '.csv')
+        with file_name.open('a') as csvfile:
+            fieldnames = list(next(result.get_points()).keys())
+            writer = csv.DictWriter(csvfile, fieldnames)
+            if file_name.stat().st_size == 0:
+                writer.writeheader()
+            for row in result.get_points():
+                # query timestamp from influxdb in ms precision
+                row['time'] /= 1000.0
+                writer.writerow(row)
+
+    time.sleep(write_time_interval - (time.time() - start_time.timestamp()) % write_time_interval)
diff --git a/influxdb/requirements.txt b/influxdb/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9c463474a1576e327b8ee703d6b55993408b1fa0
--- /dev/null
+++ b/influxdb/requirements.txt
@@ -0,0 +1 @@
+influxdb==5.2.1