Mỗi hành động được thực hiện bởi Salt, chẳng hạn như áp dụng trạng thái cao hoặc khởi động lại một minion, sẽ tạo ra một sự kiện. Beacon phát ra các sự kiện cho các quy trình không phải salt, chẳng hạn như thay đổi trạng thái hệ thống hoặc thay đổi tệp. Hướng dẫn này sẽ sử dụng các beacon Salt để thông báo cho Salt master về các thay đổi đối với minion và các lò phản ứng Salt để phản ứng với các thay đổi đó.
Trước khi bạn bắt đầu
Nếu bạn chưa có Salt master và minion, hãy làm theo các bước đầu tiên trong hướng dẫn Bắt đầu với Salt – Cài đặt và thiết lập cơ bản của chúng tôi .
Ghi chú: Các bước trong hướng dẫn này yêu cầu quyền root. Hãy đảm bảo chạy các bước bên dưới dưới dạng root
hoặc với sudo
tiền tố. Để biết thêm thông tin về quyền, hãy xem hướng dẫn Người dùng và Nhóm của chúng tôi .
Ví dụ 1: Ngăn chặn sự trôi dạt cấu hình
Trôi cấu hình xảy ra khi có những thay đổi không được theo dõi đối với tệp cấu hình hệ thống. Salt có thể giúp ngăn chặn trôi cấu hình bằng cách đảm bảo rằng tệp được khôi phục ngay lập tức về trạng thái an toàn khi có thay đổi. Để thực hiện việc này, trước tiên chúng ta phải để Salt quản lý tệp. Phần này sẽ sử dụng tệp cấu hình NGINX làm ví dụ, nhưng bạn có thể chọn bất kỳ tệp nào.
Quản lý tập tin của bạn
1.Trên máy chủ Salt của bạn, hãy tạo một thư mục cho các tệp được quản lý của bạn trong /srv/salt/files
:
mkdir /srv/salt/files
2.Trên Salt master, hãy đặt tệp nginx.conf
, hoặc bất kỳ tệp nào bạn muốn quản lý vào /srv/salt/files
thư mục.
3.Trên máy chủ Salt của bạn, hãy tạo một tệp trạng thái để quản lý tệp cấu hình NGINX:
/etc/nginx/nginx.conf:
file.managed:
- source:
- salt://files/nginx.conf
- makedirs: True
Có hai đường dẫn tệp trong .sls
tệp này. Đường dẫn tệp đầu tiên là đường dẫn đến tệp được quản lý của bạn trên minion của bạn. Đường dẫn thứ hai, bên dưới source
và có tiền tố là salt://
, trỏ đến đường dẫn tệp trên máy chủ của bạn. salt://
là đường dẫn tệp tiện lợi ánh xạ đến /srv/salt
.
4.Trên Salt master của bạn, hãy tạo một tệp top nếu nó chưa tồn tại và thêm nginx_conf.sls
:
base:
'*':
- nginx_conf
5.Áp dụng trạng thái cao từ chủ nhân Salt của bạn để chạy nginx_conf.sls
trạng thái đó trên các thuộc hạ của bạn.
salt '*' state.apply
Tạo một Beacon
1.Để được thông báo khi tệp thay đổi, bạn sẽ cần pyinotify
gói Python. Tạo trạng thái Salt sẽ xử lý việc cài đặt pyinotify
gói trên minion của bạn:
python-pip:
pkg.installed
pyinotify:
pip.installed:
- require:
- pkg: python-pip
Ghi chú: Đèn báo inotify chỉ hoạt động trên các hệ điều hành có hỗ trợ hạt nhân inotify. Hiện tại, điều này không bao gồm FreeBSD, macOS và Windows.
2.Trên máy chủ Salt, tạo một minion.d
thư mục để lưu trữ tệp cấu hình beacon:
mkdir /srv/salt/files/minion.d
3.Bây giờ hãy tạo một beacon sẽ phát ra sự kiện mỗi khi nginx.conf
file thay đổi trên minion của bạn. Tạo /etc/salt/minion.d/beacons.conf
file và thêm các dòng sau:
beacons:
inotify:
- files:
/etc/nginx/nginx.conf:
mask:
- modify
- disable_during_state_run: True
4.Để áp dụng hiệu ứng này cho minion của bạn, hãy tạo file.managed
trạng thái Salt mới:
/etc/salt/minion.d/beacons.conf:
file.managed:
- source:
- salt://files/minion.d/beacons.conf
- makedirs: True
5.Thêm trạng thái mới packages
vào beacons
tệp trên cùng của Salt master:
base:
'*':
- nginx_conf
- packages
- beacons
6.Áp dụng trạng thái cao từ Salt master của bạn để thực hiện những thay đổi sau trên minion của bạn:
salt '*' state.apply
7.Mở một shell khác cho Salt master của bạn và khởi động trình chạy sự kiện Salt. Bạn sẽ sử dụng trình này để theo dõi các sự kiện thay đổi tệp từ beacon của bạn.
salt-run state.event pretty=True
8.Trên Salt minion của bạn, hãy thay đổi nginx.conf
tệp của bạn, sau đó kiểm tra shell trình chạy sự kiện Salt của bạn. Bạn sẽ thấy một sự kiện như sau:
salt/beacon/salt-minion/inotify//etc/nginx/nginx.conf {
"_stamp": "2018-10-10T13:53:47.163499",
"change": "IN_MODIFY",
"id": "salt-minion",
"path": "/etc/nginx/nginx.conf"
}
Lưu ý rằng dòng đầu tiên là tên sự kiện và bao gồm tên minion Salt của bạn và đường dẫn đến tệp được quản lý của bạn. Chúng tôi sẽ sử dụng tên sự kiện này trong phần tiếp theo.
9.Để khôi phục nginx.conf
tệp về trạng thái ban đầu, bạn có thể áp dụng trạng thái cao từ Salt master của mình.
salt '*' state.apply nginx_conf
Mở tệp được quản lý của bạn trên minion Salt và nhận thấy rằng thay đổi đã được hoàn nguyên. Chúng tôi sẽ tự động hóa bước cuối cùng này trong phần tiếp theo.
Tạo một lò phản ứng
1.Trên máy chủ Salt của bạn, hãy tạo thư /srv/reactor
mục:
mkdir /srv/reactor
2.Sau đó tạo tệp trạng thái lò phản ứng trong /srv/reactor
thư mục và bao gồm nội dung sau:
/etc/nginx/nginx.conf:
local.state.apply:
- tgt: {{ data['id'] }}
- arg:
- nginx_conf
Đường dẫn tệp ở dòng đầu tiên chỉ đơn giản là tên của lò phản ứng và có thể là bất kỳ tên nào bạn chọn. tgt
, hoặc mục tiêu, là minion Salt sẽ nhận được highstate. Trong trường hợp này, thông tin được truyền đến lò phản ứng từ sự kiện beacon được sử dụng để lập trình chọn đúng ID minion Salt. Thông tin này có sẵn dưới dạng data
từ điển. arg
, hoặc đối số, là tên của tệp trạng thái Salt được tạo để quản lý tệp nginx.conf
.
3.Trên Salt master của bạn, hãy tạo một reactor.conf
tệp và bao gồm tệp trạng thái lò phản ứng mới:
reactor:
- 'salt/beacon/*/inotify//etc/nginx/nginx.conf':
- /srv/reactor/nginx_conf_reactor.sls
Tệp này reactor.conf
về cơ bản là danh sách các tên sự kiện khớp với các tệp trạng thái lò phản ứng. Trong ví dụ này, chúng tôi đã sử dụng glob (*) trong tên sự kiện thay vì chỉ định ID minion cụ thể (có nghĩa là bất kỳ thay đổi nào đối với a nginx.conf
trên bất kỳ minion nào cũng sẽ kích hoạt lò phản ứng), nhưng bạn có thể thấy ID minion cụ thể phù hợp hơn với nhu cầu của mình.
4.Khởi động lại salt-master
dịch vụ để áp dụng reactor.conf
tệp:
systemctl restart salt-master
5.Trên Salt minion của bạn, hãy thay đổi tệp nginx.conf
. Sau đó kiểm tra shell event runner của bạn và bạn sẽ thấy một số sự kiện. Sau đó, hãy kiểm tra nginx.conf
tệp của bạn. Những thay đổi bạn đã thực hiện sẽ tự động được hoàn nguyên.
Xin chúc mừng, bây giờ bạn đã biết cách quản lý trôi cấu hình bằng Salt. Tất cả các bản cập nhật trong tương lai nginx.conf
phải được thực hiện trên Salt master và áp dụng bằng cách sử dụng state.apply
.
Ví dụ 2: Theo dõi việc sử dụng bộ nhớ Minion với Slack
Salt đi kèm với một số đèn hiệu giám sát hệ thống. Trong ví dụ này, chúng ta sẽ giám sát mức sử dụng bộ nhớ của một minion và gửi thông báo Slack khi mức sử dụng bộ nhớ vượt ngưỡng nhất định. Đối với phần này, bạn sẽ cần tạo một bot Slack, lấy mã thông báo OAuth và cấu hình bot để có thể gửi tin nhắn Slack thay mặt bạn.
Cấu hình ứng dụng Slack của bạn
- Tạo ứng dụng Slack .
- Từ trang cài đặt ứng dụng Slack, điều hướng đến OAuth & Quyền.
- Sao chép Mã thông báo truy cập OAuth.
- Trong Phạm vi, chọn Gửi tin nhắn dưới dạng <tên ứng dụng của bạn> .
Tạo một Beacon
1.Trên Salt master của bạn, hãy mở hoặc tạo tệp /srv/salt/files/minion.d/beacons.conf
và thêm các dòng sau. Nếu bạn đã có tệp beacons.conf
từ ví dụ trước, hãy bỏ dòng đó đi beacons:
, nhưng đảm bảo phần còn lại của cấu hình được thụt lề hai khoảng trắng:
beacons:
memusage:
beacon.present:
- percent: 15%
- interval: 15
Trong ví dụ này, chúng tôi để tỷ lệ sử dụng bộ nhớ ở mức thấp để đảm bảo sự kiện beacon sẽ kích hoạt và khoảng thời gian sự kiện được đặt thành 15 giây. Trong môi trường sản xuất, bạn nên thay đổi các giá trị này thành các giá trị hợp lý hơn.
2.Áp dụng trạng thái cao từ Salt master của bạn để thêm ngọn hải đăng vào lính của bạn:
salt '*' state.apply
3.Nếu bạn chưa thực hiện, hãy mở một shell khác trong Salt master của bạn và khởi động trình chạy sự kiện:
salt-run state.event pretty=True
4.Sau vài giây, giả sử bạn đã đặt phần trăm bộ nhớ đủ thấp, bạn sẽ thấy sự kiện như sau:
salt/beacon/salt-minion/memusage/ {
"_stamp": "2018-10-10T15:48:53.165368",
"id": "salt-minion",
"memusage": 20.7
}
Lưu ý rằng dòng đầu tiên là tên sự kiện và chứa tên minion. Chúng ta sẽ sử dụng tên sự kiện này trong phần tiếp theo.
Tạo một lò phản ứng
1.Trên máy chủ Salt của bạn, hãy tạo thư /srv/reactor
mục nếu bạn chưa thực hiện:
mkdir /srv/reactor
2.Sau đó tạo một tệp trạng thái phản ứng và thêm các dòng sau, đảm bảo thay đổi các khóa channel
, api_key
, và from_name
để phản ánh các giá trị mong muốn của bạn. Đây api_key
là mã thông báo OAuth mà bạn đã sao chép ở bước 3 của phần Cấu hình ứng dụng Slack của bạn :
Send memusage to Slack:
local.slack.post_message:
- tgt: {{ data['id'] }}
- kwarg:
channel: "#general"
api_key: "xoxp-451607817121-453578458246..."
message: "{{ data['id'] }} has hit a memory usage threshold: {{ data['memusage'] }}%."
from_name: "Memusage Bot"
Chúng tôi đang sử dụng từ data
điển được cung cấp cho lò phản ứng từ sự kiện memusage để điền ID minion và mức sử dụng bộ nhớ.
3.Mở hoặc tạo reactor.conf
tệp. Nếu bạn đã có reactor.conf
tệp từ ví dụ trước, hãy bỏ dòng đó đi reactor:
, nhưng đảm bảo phần còn lại của cấu hình được thụt lề hai khoảng trắng:
reactor:
- 'salt/beacon/*/memusage/':
- '/srv/reactor/memusage.sls'
4.Khởi động lại salt-master
để áp dụng reactor.conf
:
systemctl restart salt-master
5.Trong shell event-runner của bạn, sau vài giây, bạn sẽ thấy một sự kiện như sau:
salt/job/20181010161053393111/ret/salt-minion {
"_stamp": "2018-10-10T16:10:53.571956",
"cmd": "_return",
"fun": "slack.post_message",
"fun_args": [
{
"api_key": "xoxp-451607817121-453578458246-452348335312-2328ce145e5c0c724c3a8bc2afafee17",
"channel": "#general",
"from_name": "Memusage Bot",
"message": "salt-minion has hit a memory usage threshold: 20.7."
}
],
"id": "salt-minion",
"jid": "20181010161053393111",
"retcode": 0,
"return": true,
"success": true
}
6.Mở Slack và bạn sẽ thấy ứng dụng của bạn đã thông báo cho phòng.
Xin chúc mừng, giờ bạn đã biết cách theo dõi mức sử dụng bộ nhớ của Salt minion bằng tích hợp Slack. Salt cũng có thể theo dõi tải CPU, mức sử dụng đĩa và một số thứ khác. Tham khảo phần Thông tin thêm bên dưới để biết thêm tài nguyên.
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.