18/09/2018, 16:32

Làm thế nào để theo dõi số liệu hệ thống với ngăn xếp TICK trên CentOS 7

Giới thiệu Ngăn xếp TICK là một tập hợp các sản phẩm từ các nhà phát triển của cơ sở dữ liệu chuỗi thời gian InfluxDB. Nó được tạo thành từ các thành phần sau: T elegraf thu thập dữ liệu chuỗi thời gian từ nhiều nguồn khác nhau. tôi nfluxDB lưu trữ dữ liệu chuỗi thời gian. C hronograf ...

Giới thiệu

Ngăn xếp TICK là một tập hợp các sản phẩm từ các nhà phát triển của cơ sở dữ liệu chuỗi thời gian InfluxDB. Nó được tạo thành từ các thành phần sau:

  • Telegraf thu thập dữ liệu chuỗi thời gian từ nhiều nguồn khác nhau.
  • tôinfluxDB lưu trữ dữ liệu chuỗi thời gian.
  • Chronograf hình dung và vẽ đồ thị dữ liệu chuỗi thời gian.
  • Kapacitor cung cấp cảnh báo và phát hiện dị thường trong dữ liệu chuỗi thời gian.

Bạn có thể sử dụng riêng từng thành phần này, nhưng nếu bạn sử dụng chúng với nhau, bạn sẽ có một hệ thống nguồn mở tích hợp có thể mở rộng để xử lý dữ liệu chuỗi thời gian.

Trong hướng dẫn này, bạn sẽ thiết lập và sử dụng nền tảng này như một hệ thống giám sát nguồn mở. Bạn sẽ tạo ra một chút sử dụng CPU và nhận được một cảnh báo email khi mức sử dụng quá cao.

Điều kiện tiên quyết

Trước khi bắt đầu, bạn sẽ cần những điều sau:

  • Một máy chủ CentOS 7 được thiết lập bằng cách làm theo Hướng dẫn cài đặt máy chủ ban đầu của CentOS 7, bao gồm một người dùng không phải root sudo và tường lửa.
  • Nếu bạn muốn bảo đảm giao diện người dùng Chronograf như được giải thích trong Bước 7, bạn sẽ cần GitHub tài khoản là một phần của tổ chức GitHub. Theo hướng dẫn này để tạo tổ chức GitHub.

Bước 1 - Thêm kho lưu trữ TICK Stack

Các ngăn xếp ngăn xếp TICK không có sẵn thông qua trình quản lý gói theo mặc định. Tất cả các thành phần ngăn xếp TICK sử dụng cùng một kho lưu trữ, vì vậy chúng tôi sẽ thiết lập một tệp cấu hình kho lưu trữ để thực hiện cài đặt liền mạch.

Tạo tệp mới này:

sudo vi /etc/yum.repos.d/influxdata.repo

Đặt cấu hình sau vào tệp mới:

/etc/yum.repos.d/influxdata.repo

[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

Lưu tệp và thoát khỏi trình chỉnh sửa. Bây giờ chúng ta có thể cài đặt và cấu hình InfluxDB

Bước 2 - Cài đặt InfluxDB và cấu hình xác thực

InfluxDB là một cơ sở dữ liệu mã nguồn mở được tối ưu hóa để lưu trữ nhanh chóng, có sẵn cao và truy xuất dữ liệu chuỗi thời gian. InfluxDB rất tuyệt vời cho việc giám sát hoạt động, số liệu ứng dụng và phân tích theo thời gian thực.

Chạy lệnh sau để cài đặt InfluxDB:

sudo yum install influxdb

Trong quá trình cài đặt, bạn sẽ được yêu cầu nhập khóa GPG. Xác nhận rằng bạn muốn nhập khóa này để cài đặt có thể tiếp tục.

Sau khi cài đặt hoàn tất, khởi động dịch vụ InfluxDB:

sudo systemctl start influxdb

Sau đó, đảm bảo dịch vụ đang chạy đúng cách:

systemctl status influxdb

Bạn sẽ thấy trạng thái sau, xác minh rằng dịch vụ đang chạy:

[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)

InfluxDB đang chạy, nhưng bạn sẽ muốn bật xác thực người dùng để hạn chế quyền truy cập vào cơ sở dữ liệu. Cho phép tạo ít nhất một người dùng quản trị.

Khởi động bảng điều khiển InfluxDB:

influx

Thực hiện lệnh sau để tạo người dùng quản trị viên mới. Chúng tôi sẽ tạo sammy người dùng có mật khẩu sammy_admin, nhưng bạn có thể sử dụng bất cứ điều gì bạn muốn.

CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES

Xác minh rằng người dùng được tạo:

show users

Bạn sẽ thấy kết quả sau, xác minh rằng người dùng của bạn đã được tạo:

Output    user  admin
    ----  -----
    sammy true

Bây giờ người dùng đã tồn tại, thoát khỏi bảng điều khiển InfluxDB:

exit

Bây giờ hãy mở tệp /etc/influxdb/influxdb.conf trong trình soạn thảo của bạn. Đây là tệp cấu hình cho InfluxDB.

sudo vi /etc/influxdb/influxdb.conf

Xác định vị trí [http] , bỏ ghi chú auth-enabled và đặt giá trị của nó thành true :

/etc/influxdb/influxdb.conf

...
    [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
...

Sau đó lưu tệp, thoát trình chỉnh sửa và khởi động lại dịch vụ InfluxDB:

sudo systemctl restart influxdb

InfluxDB bây giờ đã được cấu hình, vì vậy hãy cài đặt Telegraf, một tác nhân để thu thập các số liệu.

Bước 3 - Cài đặt và cấu hình Telegraf

Telegraf là một đại lý nguồn mở thu thập số liệu và dữ liệu trên hệ thống đang chạy hoặc từ các dịch vụ khác. Telegraf sau đó ghi dữ liệu vào InfluxDB hoặc các kết quả đầu ra khác.

Chạy lệnh sau để cài đặt Telegraf:

sudo yum install telegraf

Telegraf sử dụng các plugin cho dữ liệu đầu vào và đầu ra. Plugin đầu ra mặc định dành cho InfluxDB. Vì chúng tôi đã bật xác thực người dùng cho IndexDB, chúng tôi phải sửa đổi tệp cấu hình của Telegraf để chỉ định tên người dùng và mật khẩu mà chúng tôi đã định cấu hình. Mở tệp cấu hình Telegraf trong trình soạn thảo của bạn:

sudo vi /etc/telegraf/telegraf.conf

Xác định vị trí [outputs.influxdb] và cung cấp tên người dùng và mật khẩu:

/etc/telegraf/telegraf.conf

    [[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

Lưu tệp, thoát trình soạn thảo và khởi động Telegraf:

sudo systemctl start telegraf

Sau đó kiểm tra xem dịch vụ có đang chạy đúng cách không:

systemctl status telegraf

Bạn sẽ thấy trạng thái sau, cho biết Telegraf đang chạy.

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)

Telegraf hiện đang thu thập dữ liệu và viết nó lên InfluxDB. Hãy mở bảng điều khiển InfluxDB và xem các phép đo Telegraf đang lưu trữ trong cơ sở dữ liệu. Kết nối với tên người dùng và mật khẩu mà bạn đã định cấu hình trước đó:

influx -username 'sammy' -password 'sammy_admin'

Sau khi đăng nhập, thực hiện lệnh này để xem các cơ sở dữ liệu có sẵn:

show databases

Bạn sẽ thấy telegraf cơ sở dữ liệu được liệt kê trong đầu ra:

Output    name: databases
    name
    ----
    _internal
    telegraf

chú thích: Nếu bạn không thấy telegraf cơ sở dữ liệu, kiểm tra cài đặt Telegraf bạn đã cấu hình để đảm bảo bạn đã chỉ định tên người dùng và mật khẩu thích hợp.

Hãy xem Telegraf đang lưu trữ gì trong cơ sở dữ liệu đó. Thực hiện lệnh sau để chuyển sang cơ sở dữ liệu Telegraf:

use telegraf

Hiển thị các phép đo khác nhau Telegraf đã thu thập bằng cách thực hiện lệnh này:

show measurements

Bạn sẽ thấy kết quả sau:

Output    name: measurements
    name
    ----
    cpu
    disk
    diskio
    kernel
    mem
    processes
    swap
    system

Như bạn thấy, Telegraf đã thu thập và lưu trữ rất nhiều thông tin trong cơ sở dữ liệu này.

Có hơn 60 plugin đầu vào cho Telegraf. Nó có thể thu thập số liệu từ nhiều dịch vụ và cơ sở dữ liệu phổ biến, bao gồm:

  • Apache
  • Cassandra
  • Docker
  • Elasticsearch
  • Graylog
  • IPtables
  • MySQL
  • PostgreSQL
  • Redis
  • SNMP
  • và nhiều người khác

Bạn có thể xem hướng dẫn sử dụng cho từng plugin đầu vào bằng cách chạy telegraf -usage plugin-name trong cửa sổ đầu cuối.

Thoát khỏi bảng điều khiển InfluxDB:

exit

Bây giờ chúng ta biết Telegraf đang lưu trữ các phép đo, hãy thiết lập Kapacitor để xử lý dữ liệu.

Bước 4 - Cài đặt Kapacitor

Kapacitor là một công cụ xử lý dữ liệu. Nó cho phép bạn cắm logic tùy chỉnh của riêng mình để xử lý cảnh báo với ngưỡng động, số liệu đối sánh cho mẫu hoặc xác định các bất thường thống kê. Chúng tôi sẽ sử dụng Kapacitor để đọc dữ liệu từ InfluxDB, tạo cảnh báo và gửi những cảnh báo đó đến một địa chỉ email được chỉ định.

Chạy lệnh sau để cài đặt Kapacitor:

sudo yum install kapacitor

Mở tệp cấu hình Kapacitor trong trình soạn thảo của bạn:

sudo vi /etc/kapacitor/kapacitor.conf

Xác định vị trí [[influxdb]] và cung cấp tên người dùng và mật khẩu để kết nối với cơ sở dữ liệu InfluxDB:

/etc/kapacitor/kapacitor.conf

# 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"
...

Lưu tệp, thoát trình soạn thảo và khởi động Trình giữ chỗ:

sudo systemctl daemon-reload

sudo systemctl start kapacitor

Bây giờ hãy xác minh rằng Kapacitor đang chạy. Kiểm tra danh sách nhiệm vụ của Kapacitor bằng lệnh sau:

kapacitor list tasks

Nếu Kapacitor khởi động và chạy, bạn sẽ thấy một danh sách các tác vụ trống, như sau:

Output    ID                            Type      Status    Executing Databases and Retention Policies

Với Kapacitor đã được cài đặt và cấu hình, hãy cài đặt thành phần giao diện người dùng của ngăn xếp TICK để chúng ta có thể thấy một số kết quả và định cấu hình một số cảnh báo.

Bước 5 - Cài đặt và cấu hình Chronograf

Chronograf là một ứng dụng đồ họa và trực quan cung cấp các công cụ trực quan hóa dữ liệu giám sát và tạo ra các quy tắc cảnh báo và tự động hóa. Nó bao gồm hỗ trợ cho các mẫu và có một thư viện các trang tổng quan thông minh, được định cấu hình trước cho các tập dữ liệu chung. Chúng tôi sẽ cấu hình nó để kết nối với các thành phần khác mà chúng tôi đã cài đặt.

Tải xuống và cài đặt gói 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

Sau đó bắt đầu dịch vụ Chronograf:

sudo systemctl start chronograf

chú thích: Nếu bạn đang sử dụng FirewallD, hãy định cấu hình nó để cho phép các kết nối đến cổng8888:

sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp

sudo firewall-cmd --reload

Làm theo hướng dẫn Cách thiết lập tường lửa bằng FirewallD trên CentOS 7 để tìm hiểu thêm về các quy tắc của FirewallD.

Bây giờ bạn có thể truy cập vào giao diện Chronograf bằng cách truy cập http://your_server_ip:8888 trong trình duyệt web của bạn.

Bạn sẽ thấy một trang chào mừng giống như trang trong hình dưới đây:

The Chronograf welcome screen with fields to connect to a data source

Nhập tên người dùng và mật khẩu cho cơ sở dữ liệu InfluxDB và nhấp Kết nối nguồn mới tiến hành với.

Sau khi kết nối, bạn sẽ thấy một danh sách các máy chủ. Nhấp vào tên máy chủ cho máy chủ của bạn để mở trang tổng quan với một loạt biểu đồ cấp hệ thống về máy chủ lưu trữ của bạn, như được hiển thị trong hình ảnh sau:

The dashboard for your server

Bây giờ hãy kết nối Chronograf với Kapacitor để thiết lập một cảnh báo. Di chuột qua mục cuối cùng trong trình đơn điều hướng bên trái và nhấp vào Kapacitor để mở trang cấu hình.

Configuring Kapacitor

Sử dụng các chi tiết kết nối mặc định; chúng tôi đã không định cấu hình tên người dùng và mật khẩu cho Kapacitor. Nhấp chuột Kết nối Kapacitor. Khi Kapacitor kết nối thành công, bạn sẽ thấy Định cấu hình các điểm cuối thông báo phần xuất hiện bên dưới biểu mẫu.

Kapacitor hỗ trợ nhiều điểm cuối cảnh báo:

  • HipChat
  • OpsGenie
  • PagerDuty
  • Sensu
  • Slack
  • SMTP
  • Nói chuyện
  • Telegram
  • VictorOps

Phương thức giao tiếp đơn giản nhất là SMTP, được chọn theo mặc định. Điền vào Từ email trường có địa chỉ mà cảnh báo sẽ được gửi và nhấp vào Tiết kiệm. Bạn có thể để phần còn lại của chi tiết ở các giá trị mặc định.

Với cấu hình tại chỗ, hãy tạo một số cảnh báo.

Bước 6 - Định cấu hình cảnh báo

Hãy thiết lập một cảnh báo đơn giản để tìm mức sử dụng CPU cao.

Di chuột qua menu điều hướng bên trái, tìm ALERTING phần và nhấp Quy tắc Kapacitor. Sau đó nhấn vào Tạo quy tắc mới.

Trong phần đầu tiên, chọn chuỗi thời gian bằng cách nhấp vào telegraf.autogen. Sau đó chọn hệ thống từ danh sách xuất hiện. Sau đó chọn load1. Bạn sẽ thấy ngay một biểu đồ tương ứng trong phần bên dưới.

Phía trên biểu đồ, xác định trường có nội dung Gửi thông báo khi load1 lớn hơn và nhập 1.0 cho giá trị.

Sau đó dán văn bản sau vào Thông điệp cảnh báo để định cấu hình văn bản của thông điệp cảnh báo:

{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}

Bạn có thể di chuột qua các mục trong Mẫu để nhận mô tả của từng trường.

Sau đó chọn Smtp tùy chọn từ Gửi thông báo này đến danh sách thả xuống và nhập địa chỉ email của bạn vào trường được liên kết.

Theo mặc định, bạn sẽ nhận được thư ở định dạng JSON, như sau:

Example message

{
    "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"
}

Bạn có thể thiết lập thêm các tin nhắn có thể đọc được cho các thông báo bằng thư. Để thực hiện việc này, hãy nhập tin nhắn của bạn vào hộp văn bản với Đặt nội dung email ở đây trình giữ chỗ.

Bạn có thể đổi tên quy tắc này bằng cách nhấp vào tên của nó ở góc trên cùng bên trái của trang và nhập tên mới.

Cuối cùng, nhấp Lưu quy tắc ở trên cùng bên phải để hoàn tất việc định cấu hình quy tắc này.

Để kiểm tra cảnh báo mới được tạo này, hãy tạo tăng đột biến CPU bằng cách sử dụng dd lệnh để đọc dữ liệu từ /dev/zero và gửi nó đến /dev/null:

dd if=/dev/zero of=/dev/null

Hãy để lệnh chạy trong vài phút, điều đó là đủ để tạo ra sự tăng đột biến. Bạn có thể dừng lệnh bất kỳ lúc nào bằng cách nhấn CTRL+C.

Sau một thời gian, bạn sẽ nhận được một tin nhắn e-mail. Ngoài ra, bạn có thể xem tất cả các cảnh báo của mình bằng cách nhấp vào Lịch sử thông báo trong menu điều hướng bên trái của giao diện người dùng Chronograf.

chú thích: Sau khi bạn đã xác minh rằng bạn có thể nhận được thông báo, hãy nhớ dừng dd lệnh bạn bắt đầu với CTRL+C.

Chúng tôi đã có cảnh báo đang chạy nhưng mọi người đều có thể đăng nhập vào Chronograf. Hãy hạn chế acess.

Bước 7 - Bảo mật Chronograf với OAuth

Theo mặc định, bất kỳ ai biết địa chỉ của máy chủ đang chạy ứng dụng Chronograf đều có thể xem bất kỳ dữ liệu nào. Nó có thể chấp nhận được đối với môi trường thử nghiệm nhưng không thể cho sản xuất. Chronograf hỗ trợ xác thực OAuth cho Google, Heroku và GitHub. Chúng tôi sẽ định cấu hình đăng nhập qua GitHub tài khoản, vì vậy bạn sẽ cần một tài khoản để tiếp tục.

Đầu tiên, đăng ký một ứng dụng mới với GitHub. Đăng nhập vào tài khoản GitHub của bạn và điều hướng đến https://github.com/settings/applications/new.

Sau đó điền vào mẫu với các chi tiết sau:

  1. Điền vào Tên ứng dụng với Chronograf hoặc một tên mô tả phù hợp.
  2. Cho URL trang chủ, sử dụng http://your_server_ip:8888.
  3. Điền vào URL gọi lại ủy quyền với http://your_server_ip:8888/oauth/github/callback.
  4. Nhấp chuột Đăng ký ứng dụng để lưu cài đặt.
  5. Sao chép ID ứng dụng kháchBí mật ứng dụng khách các giá trị được cung cấp trên màn hình tiếp theo.

Tiếp theo, chỉnh sửa kịch bản systemd của Chronograf để cho phép xác thực. Mở tập tin /usr/lib/systemd/system/chronograf.service:

sudo vi /usr/lib/systemd/system/chronograf.service

Sau đó xác định vị trí [Service] và chỉnh sửa dòng bắt đầu bằng ExecStart=:

/usr/lib/systemd/system/chronograf.service

[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

Các secret_token được yêu cầu bởi tất cả các nhà cung cấp OAuth. Đặt nó thành một chuỗi ngẫu nhiên. Sử dụng ID khách hàng Github của bạn, Bí mật của khách hàng Github và Tổ chức Github cho các giá trị khác.

Cảnh báo: Nếu bạn bỏ qua tùy chọn tổ chức Github từ lệnh, bất kỳ người dùng Github nào cũng có thể đăng nhập vào cá thể Chronograf của bạn. Tạo tổ chức Github và thêm người dùng thích hợp vào tổ chức để hạn chế quyền truy cập.

Lưu tệp, thoát trình soạn thảo và khởi động lại dịch vụ Chronograf:

sudo systemctl daemon-reload

sudo systemctl restart chronograf

Mở http://your_server_ip:8888 để truy cập vào giao diện Chronograf. Lần này bạn sẽ được trình bày với một Đăng nhập bằng Github nút. Nhấp vào nút để đăng nhập và bạn sẽ được yêu cầu cho phép ứng dụng truy cập tài khoản Github của bạn. Khi bạn cho phép truy cập, bạn sẽ được đăng nhập.

Phần kết luận

Trong hướng dẫn này, bạn đã thấy cách ngăn xếp TICK có thể là một công cụ mạnh mẽ để lưu trữ, phân tích và trực quan hóa dữ liệu chuỗi thời gian. Nó có nhiều tính năng và trường hợp sử dụng. Ví dụ, bạn có thể sử dụng Kapacitor để thực hiện phát hiện bất thường hoặc là xây dựng bảng thành tích trực tiếp về điểm số trò chơi. Bạn có thể tìm hiểu thêm về ngăn xếp TICK bằng cách đọc tài liệu chính thức.

0