TICK Stack là một hệ thống giám sát mã nguồn mở được sử dụng trên hệ điều hành CentOS 7. Với 4 thành phần chính gồm Telegraf – InfluxDB – Chronograf – Kapacitor. TICK Stack giúp thu thập, lưu trữ và hiển thị các System Metrics một cách trực quan. Trong bài viết dưới đây, Vietnix sẽ hướng dẫn người dùng theo dõi System Metrics bằng TICK Stack trên CentOS 7.
Chuẩn bị gì để theo dõi System Metrics bằng TICK Stack trên CentOS 7
Để đảm bảo tiến trình theo dõi các chỉ số hệ thống thông qua nền tảng TICK Stack trên CentOS 7, người dùng cần đáp ứng được các yêu cầu sau:
- Một server CentOS 7, tài khoản người dùng non-root có quyền sudo và tường lửa.
- Một tài khoản GitHub (nếu muốn bảo mật giao diện người dùng Chronograf được trình bày cụ thể ở bước 7).
VPS là một giải pháp máy chủ đáng tin cậy và giá rẻ để lưu trữ các ứng dụng của bạn. Với việc cài đặt TICK Stack trên VPS, bạn có thể chắc chắn rằng hệ thống của bạn được giám sát và quản lý một cách chuyên nghiệp.
Hiện tại, Vietnix đang cung cấp dịch vụ thuê máy ảo (VPS) với giá cả phải chăng, hỗ trợ nhiều hệ điều hành khác nhau cho server như: CentOS, Ubuntu Server, Windows Server. Nếu bạn đang có nhu cầu sử dụng VPS để triển khai và cài đặt ứng dụng thì có thể liên hệ với đội ngũ Vietnix để được gói dịch vụ phù hợp nhất.
Bên trong TICK, người dùng có thể sử dụng riêng từng thành phần một, nhưng nếu kết hợp với nhau người dùng sẽ có một hệ thống mã nguồn mở, mở rộng dễ dàng để xử lý chuỗi dữ liệu thời gian.
Ở bài hướng dẫn này, bạn sẽ thiết lập và sử dụng TICK Stack như một hệ thống giám sát mã nguồn mở. Bên cạnh đó, bạn cũng cần đề ra một mức sử dụng CPU cho cho phép và sẽ có email thông báo khi mức dùng vượt quá cho phép.
Bước 1: Thêm Repository (Kho lưu trữ) cho TICK Stack
Tại Package Manager theo mặc định sẽ không có sẵn các thành phần của TICK stack. Tất cả các thành phần này của TICK stack đều sử dụng cùng một repository, vì thế người dùng cần cấu hình một file repository để quá trình cài đặt diễn ra dễ dàng hơn.
Để tạo một file mới, bạn sử dụng dòng lệnh sau:
sudo vi /etc/yum.repos.d/influxdata.repo
Tiếp đó, chèn cấu hình dưới đây vào trong file mới tạo:
[influxdb]
name = InfluxData Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
Sau đó, lưu file và thoát khỏi trình chỉnh sửa. Giờ đây, người dùng đã có thể cài đặt và thiết lập InfluxDB.
Bước 2: Cài đặt InfluxDB và thiết lập Authentication
InfluxDB là một database mã nguồn mở được tối ưu hóa nhằm mục đích lưu trữ và truy xuất dữ liệu chuỗi thời gian nhanh và có tính khả dụng cao. Đồng thời, database này còn thích hợp sử dụng để theo dõi và giám sát các hoạt động, chỉ số ứng dụng và phân tích thời gian thực.
Thực hiện cài đặt InfluxDB, người dùng khởi chạy mã lệnh sau:
sudo yum install influxdb
Trong quá trình thiết lập, màn hình sẽ hiển thị thông báo yêu cầu nhập khóa GPG. Lúc này, để quá trình cài đặt được tiếp tục, người dùng cần xác nhận muốn nhập khóa GPG.
Sau khi hoàn tất cài đặt, để khởi chạy InfluxDB, bạn nhập lệnh:
sudo systemctl start influxdb
Để đảm bảo rằng InfluxDB đang vận hành đúng cách, người dùng có thể kiểm tra thông qua câu lệnh:
systemctl status influxdb
Khi thấy Output hiển thị trạng thái như bên dưới, đồng nghĩa rằng InfluxDB vẫn đang khởi chạy đúng:
[secondary_label Output
● influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-02-07 13:19:31 EET; 2min 46s ago
Docs: https://docs.influxdata.com/influxdb/
Main PID: 14290 (influxd)
Trường hợp, người dùng muốn kích hoạt xác thực người dùng (user authentication) để hạn chế truy cập vào database trong quá trình khởi chạy InfluxDB. Lúc này, hãy tạo ít nhất một người dùng quản trị (user admin).
Bảng điều khiển InfluxDB (InfluxDB console) bắt đầu bằng lệnh:
influx
Sau đó, để tạo một user admin, người dùng nhập vào mã lệnh sau. (Lưu ý: Tài khoản admin với tên user trong bài hướng dẫn này là sammy
và mật khẩu là sammy_
admin).
CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES
Để xác minh tài khoản người dùng được khởi tạo, nhập mã lệnh:
show users
Trên màn hình command – line sẽ hiển thị Output xác nhận đã tạo thành công:
Output
user admin
---- -----
sammy true
Sau đó, người dùng thoát khỏi InfluxDB console với câu lệnh:
exit
Tiếp đó, trong trình chỉnh sửa của người dùng, thực hiện mở file /etc/influxdb/influxdb.conf
(file cấu hình InfluxDB).
sudo vi /etc/influxdb/influxdb.conf
Trên command – line, tìm phần [http]
và bỏ chú thích cho tùy chọn auth-enabled
rồi thiết lập giá trị cho tùy chọn này thành true
. Cụ thể:
...
[http]
# Determines whether HTTP endpoint is enabled.
# enabled = true
# The bind address used by the HTTP service.
# bind-address = ":8086"
# Determines whether HTTP authentication is enabled.
auth-enabled = true
...
Tiếp tục lưu file và thoát khỏi trình chỉnh sửa. Sau đó, khởi chạy lại dịch vụ InfluxDB với lệnh:
sudo systemctl restart influxdb
Lúc này đây, cấu hình InfluxDB đã hoàn tất. Ở các bước sau, người dùng tiếp tục cài đặt Telegraf, một đơn vị (agent) thu thập số liệu.
Bước 3: Cài đặt và cấu hình Telegraf
Telegraf là một agent mã nguồn mở được sử dụng với mục đích thu thập và báo cáo các số liệu cũng như dữ liệu từ hệ thống hay các dịch vụ khác. Sau đó, các chỉ số này sẽ được ghi vào InfluxDB hoặc vào các Output khác.
Để cài đặt Telegraf, người dùng chạy mã lệnh:
sudo yum install telegraf
Ngoài ra, Telegraf sử dụng các plugin để Input – Output dữ liệu và mặc định plugin Output cho InfluxDB. Bên cạnh đó, bởi vì IndexDB đã bật xác thực người dùng cho nên file cấu hình Telegraf phải sửa đổi để chỉ định tên người dùng và mật khẩu được thiết lập. Sử dụng câu lệnh sau để mở file cấu hình Telegraf trong trình chỉnh sửa của người dùng:
sudo vi /etc/telegraf/telegraf.conf
Tiếp đến, tìm phần [outputs.influxdb]
để điền vào tên người dùng và mật khẩu:
[[outputs.influxdb]]
## The full HTTP or UDP endpoint URL for your InfluxDB instance.
## Multiple urls can be specified as 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 = ["http://localhost:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
...
## Write timeout (for the InfluxDB client), formatted as a string.
## If not provided, will default to 5s. 0s means no timeout (not recommended).
timeout = "5s"
username = "sammy"
password = "sammy_admin"
## 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
Sau đó, lưu file và thoát trình chỉnh sửa rồi bắt đầu khởi động Telegraf với câu lệnh:
sudo systemctl start telegraf
Để kiểm tra Telegraf có đang vận hành chính xác hay không, người dùng nhập câu lệnh:
systemctl status telegraf
Khi thấy Output hiển thị kết quả như bên dưới, đồng nghĩa Telegraf vẫn đang vận hành:
Output
● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-02-07 13:32:36 EET; 3min 27s ago
Docs: https://github.com/influxdata/telegraf
Main PID: 14412 (telegraf)
Giờ đây, Telegraf đang tiến hành thu thập và ghi các dữ liệu tìm được vào InfluxDB. Để biết Telegraf đang lưu trữ các đo lường nào trong database, người dùng hãy mở Telegraf console và kết nối bằng cách nhập tên người dùng cùng mật khẩu đã thiết lập ở bước 2. Cụ thể:
influx -username 'sammy' -password 'sammy_admin'
Sau khi đăng nhập, để xem các database nào có sẵn, người dùng thực hiện nhập câu lệnh:
show databases
Ở phần Output lúc này sẽ hiển thị ra danh sách các database Telegraf
:
Output
name: databases
name
----
_internal
telegraf
Lưu ý: Nếu người dùng không tìm thấy Telegraft
database thì hãy kiểm tra các thiết lập đã được cấu hình trước đó để đảm bảo rằng tên người dùng và mật khẩu được chỉ định là chính xác.
Tiếp đó, người dùng quan sát Telegraf đang lưu trữ những gì trong InfluxDB database rồi chuyển các dữ liệu được lưu trữ này sang Telegraf database thông qua câu lệnh:
use telegraf
Để hiển thị các phép đo khác nhau Telegraf đã thu thập được, người dùng sử dụng câu lệnh:
show measurements
Output:
Output
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system
Qua kết quả Output hiển thị có thể thấy rằng Telegraf đã thu thập và lưu trữ nhiều thông tin trong InfluxDB database.
Có hơn 60 plugin Input cho Telegraf có thể thực hiện thu thập dữ liệu từ nhiều dịch vụ và database phổ biến trên thị trường, bao gồm:
- Apache
- Cassandra
- Docker
- Elasticsearch
- Graylog
- IPtables
- MySQL
- PostgreSQL
- Redis
- SNMP
- …
Với mỗi plugin Input, để xem cách sử dụng, người dùng có thể thực hiện thông qua khởi chạy câu lệnh telegraf -usage plugin-name
trong cửa sổ terminal.
Cuối cùng, người dùng thoát cửa sổ InfluxDB bằng câu lệnh:
exit
Nhìn chung, người dùng giờ đây đã biết được Telegraf đang lưu trữ những đo lường nào. Vì vậy, ở bước tiếp theo, Vietnix sẽ hướng dẫn cách cài đặt Kapacitor để xử lý các dữ liệu đã thu thập.
Xem thêm: Cách cài đặt MySQL trên CentOS 7
Bước 4: Cài đặt Kapacitor
Kapacitor là một công cụ xử lý dữ liệu (data processing engine) cho phép người dùng kết nối các custom logic của mình để thông báo tiến trình với dynamic thresholds, so sánh số liệu cho các mẫu hay xác định các điểm bất thường trong thống kê.
Ở bước này, Kapacitor được sử dụng với mục đích đọc dữ liệu từ InfluxDB, cũng như tạo và gửi các thông báo đến địa chỉ email đã được chỉ định. Để cài đặt Kapacitor, người dùng khởi chạy câu lệnh:
sudo yum install kapacitor
Sau đó, mở file thiết lập Kapacitor trong trình chỉnh sửa như sau:
sudo vi /etc/kapacitor/kapacitor.conf
Trong file cấu hình hãy tìm phần [[influxdb]]
rồi cung cấp tên người dùng và mật khẩu để kết nối đến InfluxDB database:
# Multiple InfluxDB configurations can be defined.
# Exactly one must be marked as the default.
# Each one will be given a name and can be referenced in batch queries and InfluxDBOut nodes.
[[influxdb]]
# Connect to an InfluxDB cluster
# Kapacitor can subscribe, query and write to this cluster.
# Using InfluxDB is not required and can be disabled.
enabled = true
default = true
name = "localhost"
urls = ["http://localhost:8086"]
username = "sammy"
password = "sammy_admin"
...
Sau đó, lưu file và thoát trình chỉnh sửa. Tiếp đó, khởi chạy Kapacitor với lệnh:
sudo systemctl daemon-reload
sudo systemctl start kapacitor
Tương tự như quá trình cài đặt InfluxDB và Telegraf, người dùng cũng tiến hành xác nhận Kapacitor có đang khởi chạy hay không bằng cách kiểm tra danh sách tác vụ Kapacitor với câu lệnh:
kapacitor list tasks
Nếu danh sách các tác vụ hiển thị trống như bên dưới, có nghĩa rằng, Kapacitor vẫn đang chạy bình thường:
Output
ID Type Status Executing Databases and Retention Policies
Khi Kapacitor đã được cài đặt và cấu hình, người dùng hãy thiết lập thành phần giao diện người dùng ở TICK stack để có thể xem được kết quả và cấu hình một số alert.
Bước 5: Cài đặt và cấu hình Chronograf
Chronograf là một ứng dụng đồ thị và trực quan hóa. Ứng dụng này cung cấp các công cụ giúp hiển thị trực quan các dữ liệu theo dõi, tạo ra các alert và automation rule. Đồng thời, ứng dụng này cũng bao gồm việc hỗ trợ cho các templates, thư viện thông minh và dashboard được cấu hình sẵn cho các tập dữ liệu phổ biến. Chronograf sẽ được định cấu hình để kết nối với các thành phần mà người dùng đã thiết lập.
Đầu tiên, thực hiện tải và cài đặt gói phần mềm Chronograf mới nhất:
wget https://dl.influxdata.com/chronograf/releases/chronograf-1.2.0~beta3.x86_64.rpm
sudo yum localinstall chronograf-1.2.0~beta3.x86_64.rpm
Tiếp theo, khởi chạy ứng dụng Chronograf với lệnh:
sudo systemctl start chronograf
Lưu ý: Trường hợp người dùng đang sử dụng FirewallID thì có thể cấu hình firewall để có thể kết nối đến cổng 8888
thông qua câu lệnh:
sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp
sudo firewall-cmd --reload
Với địa chỉ http://your_server_ip:8888
trên trình duyệt web mà người dùng được phép truy cập vào giao diện Chronograf.
Lúc này, trên màn hình sẽ hiển thị trang chào mừng “Welcome to Chronograf” và yêu cầu người dùng điền vào ô trống Tên đăng nhập và Mật khẩu cho InfluxDB. Sau đó, nhấn vào Connect New Source để tiếp tục.
Khi đã kết nối thành công, trên màn hình giao diện người dùng sẽ hiển thị một danh sách các máy chủ. Tiếp đó, người dùng chỉ cần nhấp chuột vào tên máy chủ để mở một dashboard với một loạt các biểu đồ cấp hệ thống (system-level) về server của mình.
Sau đó, người dùng tiến hành kết nối Chronograf với Kapacitor để thiết lập alert bằng cách di chuyển chuột đến mục cuối cùng nằm bên trái menu điều hướng. Tiếp đó, nhấp vào Kapacitor để mở trang cấu hình.
Ở trang cấu hình này, Kapacitor không được cấu hình với tên người dùng và mật khẩu để đăng nhập vào hệ thống. Do đó, người dùng có thể sử dụng các connection details mặc định để kết nối Kapacitor. Sau đó, nhấn chọn mục Connect Kapacitor.
Kết nối thành công, phần Configure Alert Endpoints sẽ xuất hiện ở bên dưới biểu mẫu Connection Details.
Kapacitor hỗ trợ nhiều alert endpoint như:
Trong đó, SMTP – giao thức truyền thống đơn giản nhất được lựa chọn làm mặc định và người dùng chỉ cần điền địa chỉ email của mình vào cột From email để gửi các alert. Ngoài ra, ở phần details còn lại, người dùng có thể để ở giá trị mặc định. Sau khi hoàn tất các thông tin cần điền, chọn Save để lưu cấu hình.
Tại nơi cấu hình được thiết lập, người dùng lúc này đã có thể tạo một số alert.
Bước 6: Cấu hình Alerts
Để theo dõi mức độ CPU usage tăng cao, người dùng hãy thiết lập một alert đơn giản bằng cách di chuyển chuột về bên trái menu điều hướng, tìm phần ALERTING và chọn Kapacitor Rules. Sau đó, nhấn vào Create New Rule.
Trong phần đầu tiên, nhấp chuột vào telegraf.autogen để chọn time-series. Sau đó, từ danh sách hiển thị, người dùng nhấn chọn system rồi chọn load1. Ngay lập tức, một biểu đồ tương ứng sẽ xuất hiện ở phía bên dưới.
Trên biểu đồ, nhập vào ô giá trị 1.0
ở vị trí cột nói rằng Send Alert where load1 is Greater Than. Tiếp đó, ở ô Alert Message, người dùng dán mã code sau để cấu hình văn bản alert message:
{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}
Tiếp đó, người dùng có thể di chuyển con trỏ chuột qua các mục trong phần Templates để xem mô tả của mỗi cột. Sau đó, từ danh sách thả xuống Send this Alert to, nhấn tùy chọn Smtp và nhập địa chỉ email của người dùng vào các cột liên quan.
Lúc này, các tin nhắn gửi đến người dùng sẽ được thiết lập mặc định ở định dạng JSON, cụ thể:
{
"Name":"system",
"TaskName":"chronograf-v1-50c67090-d74d-42ba-a47e-45ba7268619f",
"Group":"nil",
"Tags":{
"host":"centos-tick"
},
"ID":"TEST:nil",
"Fields":{
"value":1.25
},
"Level":"CRITICAL",
"Time":"2017-03-08T12:09:30Z",
"Message":"TEST:nil is CRITICAL value: 1.25"
}
Ngoài ra, người dùng cũng có thể thiết lập các tin nhắn cho email alert trở nên dễ đọc hơn bằng cách nhập tin nhắn của mình vào hộp văn bản có đoạn chữ Put email body text here.
Đồng thời, người dùng cũng có thể đổi tên rule này với thao tác nhấp vào tên rule nằm ở góc trên bên trái của trang, sau đó nhập vào một tên mới.
Cuối cùng, chọn Save Rule ở góc trên bên phải để hoàn thành quá trình cấu hình rule này.
Để kiểm tra alert mới vừa tạo này, người dùng cần tạo một đỉnh CPU thông qua việc sử dụng lệnh dd
để đọc và gửi dữ liệu từ /dev/zero
đến /dev/null
. Cụ thể:
dd if=/dev/zero of=/dev/null
Đỉnh sẽ được tạo ra sau một vài phút chờ đợi câu lệnh xử lý. Lúc này, người dùng có thể dừng lệnh bất cứ lúc nào bằng cách sử dụng tổ hợp phím Ctrl + C
.
Kết thúc tiến trình xử lý, người dùng sẽ nhận được một tin nhắn email. Ngoài ra, người dùng cũng có thể nhìn thấy tất cả các alert của mình bằng cách nhấn vào Alert history nằm ở bên trái menu điều hướng trên giao diện người dùng Chronograf.
Lưu ý: Khi người dùng xác nhận mình có thể nhận các alert cần dừng lệnh dd đã khởi chạy bằng cách sử dụng tổ hợp phím Ctrl + C
.
Bên cạnh đó, mặc dù các alert đang hoạt động trên Chronograf nhưng mọi người dùng đều có thể đăng nhập vào ứng dụng này. Do đó, cần hạn chế quyền truy cập này lại với cách thực hiện được chia sẻ ở bước tiếp theo.
Bước 7: Bảo mật Chronograf bằng giao thức OAuth (Open Authorization)
Như đã đề cập ở trên, bất kỳ người dùng nào biết địa chỉ của máy chủ hoạt động trên ứng dụng Chronograf theo mặc định đều có thể xem các dữ liệu được lưu trữ. Đối với môi trường thử nghiệm thì điều này có thể chấp nhận, nhưng ở môi trường sản xuất thì lại không thích hợp.
Do đó, để hạn chế truy cập, Chronograf hỗ trợ xác thực thông qua OAuth trên Google, Heroku và GitHub. Người dùng lúc bấy giờ sẽ thiết lập đăng nhập thông qua tài khoản GitHub.
Đầu tiên, đăng ký một ứng dụng mới trên GitHub bằng cách đăng nhập vào tài khoản GitHub và điều hướng đến trang https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fsettings%2Fapplications%2Fnew.
Sau đó, điền vào biểu mẫu với các thông tin sau:
- Điền vào Application name bằng tên Chronograf hoặc một tên mô tả phù hợp.
- Đối với cột Homepage URL, sử dụng địa chỉ
http://your_server_ip:8888
. - Điền Authorization callback URL với địa chỉ
http://your_server_ip:8888/oauth/github/callback
. - Nhấn vào nút Register application để lưu các thiết lập.
- Sao chép giá trị Client ID và Client Secret được cung cấp trên màn hình tiếp theo.
Tiếp theo, chỉnh sửa script systemd của Chronograf để kích hoạt xác thực. Sau đó, mở tệp /usr/lib/systemd/system/chronograf.service
:
sudo vi /usr/lib/systemd/system/chronograf.service
Tại phần [Service]
, người dùng chỉnh sửa dòng bắt đầu với ExecStart=:
[Service]
User=chronograf
Group=chronograf
ExecStart=/usr/bin/chronograf --host 0.0.0.0 --port 8888 -b /var/lib/chronograf/chronograf-v1.db -c /usr/share/chronograf/canned -t 'secret_token' -i 'your_github_client_id' -s 'your_github_client_secret' -o 'your_github_organization'
KillMode=control-group
Restart=on-failure
Trong đó, secret_token
là yêu cầu bắt buộc cho tất cả các nhà cung cấp OAuth và người dùng cần thiết phải tạo một string ngẫu nhiên. Bên cạnh đó, để sử dụng OAuth từ GitHub, người dùng cần nhập Github Client ID, Github Client Secret, and Github Organization cho các giá trị khác.
Cảnh báo: Nếu bỏ qua tùy chọn Github Organization trong command, bất kỳ người dùng GitHub nào cũng sẽ có thể đăng nhập vào Chronograf của bạn. Do đó, để hạn chế quyền truy cập, người dùng nên tạo một Github Organization và thêm những người dùng phù hợp vào tổ chức đó.
Lưu file và rời khỏi trình chỉnh sửa, sau đó khởi chạy lại ứng dụng Chronograf với lệnh:
sudo systemctl daemon-reload
sudo systemctl restart chronograf
Để truy cập vào giao diện Chronograf, người dùng vào địa chỉ http://
your_server_ip:8888
và nhấn vào nút Login with Gibhub để đăng nhập. Sau đó, một thông báo gửi đến người dùng yêu cầu có cho phép ứng dụng này truy cập vào tài khoản Github của mình hay không. Sau khi đồng ý xác nhận thì người dùng sẽ được đăng nhập thành công.
Kết luận
Trên đây là chi tiết 6 bước hướng dẫn người dùng cách theo dõi Metric System bằng TICK Stack trên CentOS 7 đơn giản nhất. Hy vọng sẽ giúp bạn hiểu rõ hơn và khai thác thêm những khía cạnh hữu ích ở công cụ TICK Stack. Ngoài ra, trong quá trình thực hiện, nếu có thắc mắc nào chưa rõ, hãy để lại bình luận bên dưới để mọi người cùng tham khảo và hỗ trợ giải đáp.