Tuesday, September 17, 2024

Hướng dẫn cài đặt InfluxDB trên Debian và Ubuntu

-

1. Tổng quan.

InfluxDB là một công cụ lưu trữ dữ liệu theo time series mã nguồn mở, được sử dụng rộng rãi để lưu trữ và phân tích dữ liệu theo thời gian. Bài hướng dẫn này sẽ giúp bạn cài đặt InfluxDB trên hệ điều hành Debian và Ubuntu.

2. Thêm kho lưu trữ InfluxData

Trước tiên, bạn cần thêm kho lưu trữ InfluxData để hệ thống có thể tìm thấy gói cài đặt InfluxDB. Sử dụng các lệnh sau:

# Tải khoá công khai InfluxData
curl -s https://repos.influxdata.com/influxdata-archive_compat.key | gpg --import

# Thêm kho lưu trữ vào danh sách
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list   


# Cập nhật danh sách gói
sudo apt-get update

2. Cài đặt và khởi động InfluxDB

a. Đối với hệ thống không dùng systemd (Ubuntu 14.04 trở về trước, Debian 7 trở về trước)

sudo apt-get install influxd
sudo service influxdb start

b. Đối với hệ thống dùng systemd (Ubuntu 15.04 trở lên, Debian 8 trở lên)

sudo apt-get install influxd
sudo systemctl unmask influxdb.service
sudo systemctl start influxdb

3. Verify phiên bản sau khi cài đặt xong.

shell> influx -version
InfluxDB shell version: 1.8.10

4. Cấu hình của InfluxDB

InfluxDB có các thiết lập mặc định cho mọi lựa chọn trong file cấu hình. Bạn có thể xem các thiết lập này bằng lệnh:

shell> influxd config
Merging with configuration at: /etc/influxdb/influxdb.conf
reporting-disabled = false
bind-address = "127.0.0.1:8088"

[meta]
  dir = "/var/lib/influxdb/meta"
  retention-autocreate = true
  logging-enabled = true

[data]
  dir = "/var/lib/influxdb/data"
  index-version = "inmem"
  wal-dir = "/var/lib/influxdb/wal"
  wal-fsync-delay = "0s"
  validate-keys = false
  strict-error-handling = false
  query-log-enabled = true
  cache-max-memory-size = 1073741824
  cache-snapshot-memory-size = 26214400
  cache-snapshot-write-cold-duration = "10m0s"
  compact-full-write-cold-duration = "4h0m0s"
  compact-throughput = 50331648
  compact-throughput-burst = 50331648
  max-series-per-database = 1000000
  max-values-per-tag = 100000
  max-concurrent-compactions = 0
  max-index-log-file-size = 1048576
  series-id-set-cache-size = 100
  series-file-max-concurrent-snapshot-compactions = 0
  trace-logging-enabled = false
  tsm-use-madv-willneed = false

[coordinator]
  write-timeout = "10s"
  max-concurrent-queries = 0
  query-timeout = "0s"
  log-queries-after = "0s"
  max-select-point = 0
  max-select-series = 0
  max-select-buckets = 0

[retention]
  enabled = true
  check-interval = "30m0s"

[shard-precreation]
  enabled = true
  check-interval = "10m0s"
  advance-period = "30m0s"

[monitor]
  store-enabled = true
  store-database = "_internal"
  store-interval = "10s"

[subscriber]
  enabled = true
  http-timeout = "30s"
  insecure-skip-verify = false
  ca-certs = ""
  write-concurrency = 40
  write-buffer-size = 1000

[http]
  enabled = true
  bind-address = ":8086"
  auth-enabled = false
  log-enabled = true
  suppress-write-log = false
  write-tracing = false
  flux-enabled = false
  flux-log-enabled = false
  pprof-enabled = true
  pprof-auth-enabled = false
  debug-pprof-enabled = false
  ping-auth-enabled = false
  prom-read-auth-enabled = false
  https-enabled = false
  https-certificate = "/etc/ssl/influxdb.pem"
  https-private-key = ""
  max-row-limit = 0
  max-connection-limit = 0
  shared-secret = ""
  realm = "InfluxDB"
  unix-socket-enabled = false
  unix-socket-permissions = "0777"
  bind-socket = "/var/run/influxdb.sock"
  max-body-size = 25000000
  access-log-path = ""
  max-concurrent-write-limit = 0
  max-enqueued-write-limit = 0
  enqueued-write-timeout = 30000000000

[logging]
  format = "auto"
  level = "info"
  suppress-logo = false

[[graphite]]
  enabled = false
  bind-address = ":2003"
  database = "graphite"
  retention-policy = ""
  protocol = "tcp"
  batch-size = 5000
  batch-pending = 10
  batch-timeout = "1s"
  consistency-level = "one"
  separator = "."
  udp-read-buffer = 0

[[collectd]]
  enabled = false
  bind-address = ":25826"
  database = "collectd"
  retention-policy = ""
  batch-size = 5000
  batch-pending = 10
  batch-timeout = "10s"
  read-buffer = 0
  typesdb = "/usr/share/collectd/types.db"
  security-level = "none"
  auth-file = "/etc/collectd/auth_file"
  parse-multivalue-plugin = "split"

[[opentsdb]]
  enabled = false
  bind-address = ":4242"
  database = "opentsdb"
  retention-policy = ""
  consistency-level = "one"
  tls-enabled = false
  certificate = "/etc/ssl/influxdb.pem"
  batch-size = 1000
  batch-pending = 5
  batch-timeout = "1s"
  log-point-errors = true

[[udp]]
  enabled = false
  bind-address = ":8089"
  database = "udp"
  retention-policy = ""
  batch-size = 5000
  batch-pending = 10
  read-buffer = 0
  batch-timeout = "1s"
  precision = ""

[continuous_queries]
  log-enabled = true
  enabled = true
  query-stats-enabled = false
  run-interval = "1s"

[tls]
  min-version = ""
  max-version = ""

5. Tạo cơ sở dữ liệu trong InfluxDB.

Bước 1: Kiểm tra cài đặt và kết nối InfluxDB

  • Kiểm tra cài đặt: Đảm bảo bạn đã cài đặt InfluxDB trên máy tính của mình.
  • Kết nối: Mở cửa sổ terminal và chạy lệnh influx. Nếu kết nối thành công, bạn sẽ thấy thông báo tương tự như sau:
shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
>

Bước 2: Tạo cơ sở dữ liệu mới

Sử dụng lệnh CREATE DATABASE: Nhập lệnh CREATE DATABASE <db-name> trong cửa sổ terminal, thay thế <db-name> bằng tên cơ sở dữ liệu mong muốn. Ví dụ: CREATE DATABASE mydb.

shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
>

Kiểm tra thành công: Nếu không có lỗi xuất hiện, cơ sở dữ liệu đã được tạo thành công.

Bước 3: Hiển thị danh sách cơ sở dữ liệu

Sử dụng lệnh SHOW DATABASES: Nhập lệnh SHOW DATABASES để xem danh sách tất cả các cơ sở dữ liệu hiện có.

shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
>

Bước 4: Chuyển sang sử dụng cơ sở dữ liệu mới

Sử dụng lệnh USE: Nhập lệnh USE <db-name> để chuyển sang sử dụng cơ sở dữ liệu vừa tạo. Ví dụ: USE mydb.

shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb

6. Viết và truy vấn dữ liệu.

Hiểu về cấu trúc dữ liệu.

  • Time series: Dữ liệu trong InfluxDB được tổ chức theo dạng chuỗi thời gian (time series), bao gồm giá trị đo, thời gian, thẻ (tags) và trường (fields).
  • Point: Mỗi điểm dữ liệu (point) đại diện cho một mẫu cụ thể của value Nó bao gồm thời gian, name, value và các tags.

Ví dụ 1.

  • Sử dụng định dạng InfluxDB line protocol: Định dạng này bao gồm name, tag, field và thời gian. Ví dụ: cpu,host=serverA,region=us_west value=0.64.
  • Sử dụng lệnh INSERT: Nhập lệnh INSERT <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp] để chèn dữ liệu.
shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64

Truy vấn dữ liệu

  • Sử dụng lệnh SELECT: Nhập lệnh SELECT <field-key> FROM <measurement> để truy vấn dữ liệu. Ví dụ: SELECT "value" FROM "cpu".
  • *Sử dụng toán tử : Sử dụng * để truy vấn tất cả các trường và thẻ. Ví dụ: SELECT * FROM "temperature".
shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                           host    region  value
----                           ----    ------  -----
2024-09-11T04:13:15.541245507Z serverA us_west 0.64

Lưu ý:

  • Nếu không cung cấp thời gian cho một điểm dữ liệu, InfluxDB sẽ tự động gán thời gian hiện tại.
  • Sử dụng toán tử * một cách cẩn thận trên các cơ sở dữ liệu lớn, vì nó có thể gây ra vấn đề về hiệu suất.

Ví dụ 2.

Tạo dữ liệu

  • Định nghĩa đo: temperature
  • Thẻ: machine=unit42, type=assembly
  • Trường: external=25, internal=37

Viết dữ liệu:

  • Sử dụng lệnh INSERT để chèn dữ liệu vào cơ sở dữ liệu.
  • Đặt tên đo là temperature và chỉ định các thẻ và trường tương ứng.
shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                           host    region  value
----                           ----    ------  -----
2024-09-11T04:13:15.541245507Z serverA us_west 0.64
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37

Truy vấn dữ liệu

  • Sử dụng lệnh SELECT * FROM "temperature" để lấy tất cả các trường và thẻ từ đo temperature.
  • Toán tử * được sử dụng để chỉ định rằng bạn muốn lấy tất cả các cột.
shell> influx -precision rfc3339
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
> CREATE DATABASE mydb
> SHOW DATABASES
name: databases
name
----
_internal
mydb
> USE mydb
Using database mydb
> INSERT cpu,host=serverA,region=us_west value=0.64
> SELECT "host", "region", "value" FROM "cpu"
name: cpu
time                           host    region  value
----                           ----    ------  -----
2024-09-11T04:13:15.541245507Z serverA us_west 0.64
> INSERT temperature,machine=unit42,type=assembly external=25,internal=37
> SELECT * FROM "temperature"
name: temperature
time                          external internal machine type
----                          -------- -------- ------- ----
2024-09-11T04:17:23.02671042Z 25       37       unit42  assembly

Kết quả

  • Màn hình sẽ hiển thị kết quả của truy vấn, bao gồm thời gian, giá trị của các trường externalinternal, và giá trị của các thẻ machinetype.

Lưu ý:

Sử dụng * mà không có giới hạn (LIMIT clause) trên một cơ sở dữ liệu lớn có thể gây ra vấn đề về hiệu suất. Nếu truy vấn chạy quá lâu, bạn có thể nhấn Ctrl+C để hủy bỏ.

InfluxQL hỗ trợ nhiều tính năng và từ khóa khác, bao gồm biểu thức chính quy kiểu Go. Ví dụ, bạn có thể sử dụng SELECT * FROM /.*/ LIMIT 1 để lấy một dòng dữ liệu ngẫu nhiên.

> SELECT * FROM /.*/ LIMIT 1
name: cpu
time                           external host    internal machine region  type value
----                           -------- ----    -------- ------- ------  ---- -----
2024-09-11T04:13:15.541245507Z          serverA                  us_west      0.64

name: temperature
time                          external host internal machine region type     value
----                          -------- ---- -------- ------- ------ ----     -----
2024-09-11T04:17:23.02671042Z 25            37       unit42         assembly

Hoặc.

> SELECT * FROM "cpu_load_short"
--
> SELECT * FROM "cpu_load_short" WHERE "value" > 0.9

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories