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/filesthư 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 .slstệ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 sourcevà 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.slstrạ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 pyinotifygói Python. Tạo trạng thái Salt sẽ xử lý việc cài đặt pyinotifygó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.dthư 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.conffile thay đổi trên minion của bạn. Tạo /etc/salt/minion.d/beacons.conffile 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.managedtrạ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 packagesvào beaconstệ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.conftệ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.conftệ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/reactormục:

mkdir /srv/reactor

2.Sau đó tạo tệp trạng thái lò phản ứng trong /srv/reactorthư 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 datatừ đ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.conftệ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.confvề 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.conftrê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-masterdịch vụ để áp dụng reactor.conftệ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.conftệ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.confphả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

  1. Tạo ứng dụng Slack .
  2. Từ trang cài đặt ứng dụng Slack, điều hướng đến OAuth & Quyền.
  3. Sao chép Mã thông báo truy cập OAuth.
  4. 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.confvà thêm các dòng sau. Nếu bạn đã có tệp beacons.conftừ 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/reactormụ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 channelapi_key, và from_nameđể phản ánh các giá trị mong muốn của bạn. Đây api_keylà 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.conftệp. Nếu bạn đã có reactor.conftệ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.