# DIOTP ## C5 - Time Series --- # Motivation Store event-based data efficiently --- ## Time series data... - Group of datas collected in different points of time. - Sequence of observations on a certain period. - **Univariate time series:** One variable varying over time. e.g. temperature measurements of a given location. - **Multivariate time series:** Multible variables varying over time. e.g. temperature, humidity and pressure vary simultaneously. --- ## ...Time series data Regular data interval is often expected. In reality some of the data can't be measured regularly, so there must be support for irregular time series too. - **Regular time series:** is collected on a constant interval and is often called **metrics**. - **Irregular time series:** has a varying interval(occurs irregularly) and is called **events**. [series-regular-irregular-time](https://www.ibm.com/docs/en/streams/5.3?topic=series-regular-irregular-time) --- ## Metric-based data - **Characteristics:** Quantative, Time-series, Continuous - **Examples:** - **System metrics:** CPU Utilization, MEM Usage, disk I/O, network traffic - **Financial metrics:** Stock price, exchange rates, trading volumes --- ## Event-based data - **Characteristics:** Qualitative or Quantative, Irregular - **Examples:** - **System events:** Program crashes, network outages... - **Financial events:** buy/sell orders, deposits/withdrawals... --- # InfluxDB Time-series Database --- ## InfluxDB - Search-engine database for searching results - Document databases are optimized for handling documents - Time Series database for timeline search [influxdata.com](https://www.influxdata.com/index/) --- ## InfluxDB Line Protocol (v1.x) InfluxDB uses line protocol to write data points. It is a text-based format that provides the measurement, tag set, field set, and timestamp of a data point. Syntax: ``` measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200 --------------- --------------- --------------------- ------------------- | | | | Measurement Tag set Field set Timestamp ``` --- ## ...InfluxDB Line Protocol (v1.x) Example: ``` myMeasurement,tag1=value1,tag2=value2 fieldKey="fieldValue" 1556813561098000000 ``` Lines separated by the newline character "`\n`" represent a single point in InfluxDB. Line protocol is whitespace sensitive. ... --- ## InfluxDB HTTP API ... to be detailed --- # Setting up InfluxDB Prerequisites: - Remote Ubuntu22.04 LTS - Remote access - Admin privileges --- ## Setup SSH Config SSH Directory `~/.ssh` configure `config` file ```bash! nano ~/.ssh/config ``` In the config, define SSH configurations ```txt Host diotp-vm HostName public.ip.addr.here User remote_user IdentityFile ~/.ssh/keyfile ``` Login: ```bash ssh diotp-vm ``` --- ## Install InfluxDB [Install and setup InfluxDB on Ubuntu 20.04|22.04](https://medium.com/yavar/install-and-setup-influxdb-on-ubuntu-20-04-22-04-3d6e090ec70c) ```bash! # Set influxdata repository curl --silent --location -O \ https://repos.influxdata.com/influxdata-archive.key echo "943666881a1b8d9b849b74caebf02d3465d6beb716510d86a39f6c8e8dac7515 influxdata-archive.key" \ | sha256sum --check - && cat influxdata-archive.key | sudo gpg --dearmor \ | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive.gpg > /dev/null \ && echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list # Install influxdb sudo apt update && sudo apt install -y influxdb2 influx version sudo systemctl enable influxdb sudo systemctl start influxdb sudo systemctl status influxdb ``` --- ## Configure InfluxDB Edit configuration ```bash # Modify InfluxDB configuration sudo nano /etc/influx/influxdb.conf # Restart InfluxDB service sudo systemctl restart influxdb # Check InfluxDB status sudo systemctl status influxdb ``` --- ## Tunnel to dashboard Command to setup tunnel for InfluxDB Dashboard(port must be corrected) ```bash ssh -f -N -L 8086:localhost:8086 remote_user@remote_server ``` Same as above, but in SSH_CONFIG: ```bash Host my_remote_server # The hostname or IP address of the remote server HostName remote_server # Your SSH username for the remote server User user # Set up local port forwarding LocalForward 8086 localhost:8086 ``` --- ## Start SSH Tunnel for Dashboard ```bash ssh diotp-vm-influx ``` The Influx Dashboard should be available in `localhost:8086`. Use browser. --- ## Setup InfluxDB [Documentation](https://docs.influxdata.com/influxdb/v2/get-started/setup/) --- ### S1 - Run initial setup process [Documentation](https://docs.influxdata.com/influxdb/v2/get-started/setup/?t=Set+up+with+the+CLI#run-initial-setup-process) Options: - **Via UI** (first time) - Via CLI - Via HTTP API --- ### S2 - Create an all access API token [Documentation](https://docs.influxdata.com/influxdb/v2/get-started/setup/?t=Set+up+with+the+CLI#create-an-all-access-api-token) --- ### S3 - Configure authentication credentials [Documentation](https://docs.influxdata.com/influxdb/v2/get-started/setup/?t=Set+up+with+the+CLI#configure-authentication-credentials) --- ### S4 - Create a bucket [Documentation](https://docs.influxdata.com/influxdb/v2/get-started/setup/?t=Set+up+with+the+CLI#create-a-bucket) --- # Write time-series data [Write methods](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/write/): - Influx user interface (UI) - Influx CLI - InfluxDB HTTP API (v1 and v2) --- ### Influx user interface (UI) [Influx UI](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/write/#line-protocol-elements) --- ### Influx CLI [Influx CLI](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/write/?t=influx+CLI#line-protocol-elements) ```bash! influx ... ``` --- ### InfluxDB HTTP API v2 [HTTP API v2](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/write/?t=v2+API#line-protocol-elements) --- # Query time-series data [Documentation](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/query/) --- ## Query data with Flux [Documentation](https://docs.influxdata.com/influxdb/v2/get-started/query/#query-data-with-flux) Example query: ```js from(bucket: "get-started") |> range(start: 2022-01-01T08:00:00Z, stop: 2022-01-01T20:00:01Z) |> filter(fn: (r) => r._measurement == "home") |> filter(fn: (r) => r._field== "co" or r._field == "hum" or r._field == "temp") ``` --- ## Visualize data in Dashboard [Documentation](https://docs.influxdata.com/influxdb/v2/visualize-data/) ![Band](https://docs.influxdata.com/img/influxdb/2-0-visualizations-Band-example.png) --- ## Visualization types [Documentation](https://docs.influxdata.com/influxdb/v2/visualize-data/visualization-types/). Important ones: - Gauge - Graph --- ### Gauge ![Gauge](https://docs.influxdata.com/img/influxdb/2-0-visualizations-gauge-example.png) The Gauge visualization displays the most recent value for a time series in a gauge. --- ### Graph ![Graph](https://docs.influxdata.com/img/influxdb/2-0-visualizations-line-graph-example.png) The Graph visualization provides several types of graphs, each configured through the Graph controls. ---
{"title":"DIOTP - C5","contributors":"[{\"id\":\"fbb84115-3bd5-44ec-9f36-beb474a8f5e3\",\"add\":8217,\"del\":795}]","description":"Store event-based data efficiently","slideOptions":"{\"theme\":\"white\",\"transition\":\"fade\",\"slideOptions\":{\"spotlight\":{\"enabled\":true}}}"}
    374 views