{"id":34983,"date":"2024-09-17T15:20:13","date_gmt":"2024-09-17T08:20:13","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/17\/monitoring-salt-minions-with-beacons\/"},"modified":"2024-09-17T15:20:13","modified_gmt":"2024-09-17T08:20:13","slug":"monitoring-salt-minions-with-beacons","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/17\/monitoring-salt-minions-with-beacons\/","title":{"rendered":"Gi\u00e1m s\u00e1t Salt Minions v\u1edbi Beacons"},"content":{"rendered":"<p>M\u1ed7i h\u00e0nh \u0111\u1ed9ng \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1edfi Salt, ch\u1eb3ng h\u1ea1n nh\u01b0 \u00e1p d\u1ee5ng tr\u1ea1ng th\u00e1i cao ho\u1eb7c kh\u1edfi \u0111\u1ed9ng l\u1ea1i m\u1ed9t minion, s\u1ebd t\u1ea1o ra m\u1ed9t s\u1ef1 ki\u1ec7n.&nbsp;<em>Beacon<\/em>&nbsp;ph\u00e1t ra c\u00e1c s\u1ef1 ki\u1ec7n cho c\u00e1c quy tr\u00ecnh kh\u00f4ng ph\u1ea3i salt, ch\u1eb3ng h\u1ea1n nh\u01b0 thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i h\u1ec7 th\u1ed1ng ho\u1eb7c thay \u0111\u1ed5i t\u1ec7p. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd s\u1eed d\u1ee5ng c\u00e1c beacon Salt \u0111\u1ec3 th\u00f4ng b\u00e1o cho Salt master v\u1ec1 c\u00e1c thay \u0111\u1ed5i \u0111\u1ed1i v\u1edbi minion v\u00e0&nbsp;<em>c\u00e1c l\u00f2 ph\u1ea3n \u1ee9ng<\/em>&nbsp;Salt \u0111\u1ec3 ph\u1ea3n \u1ee9ng v\u1edbi c\u00e1c thay \u0111\u1ed5i \u0111\u00f3.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#before-you-begin\"><\/a><\/h2>\n<p>N\u1ebfu b\u1ea1n ch\u01b0a c\u00f3 Salt master v\u00e0 minion, h\u00e3y l\u00e0m theo c\u00e1c b\u01b0\u1edbc \u0111\u1ea7u ti\u00ean trong h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/getting-started-with-salt-basic-installation-and-setup\/\">B\u1eaft \u0111\u1ea7u v\u1edbi Salt &#8211; C\u00e0i \u0111\u1eb7t v\u00e0 thi\u1ebft l\u1eadp c\u01a1 b\u1ea3n<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c b\u01b0\u1edbc trong h\u01b0\u1edbng d\u1eabn n\u00e0y y\u00eau c\u1ea7u quy\u1ec1n root. H\u00e3y \u0111\u1ea3m b\u1ea3o ch\u1ea1y c\u00e1c b\u01b0\u1edbc b\u00ean d\u01b0\u1edbi d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>root<\/code> ho\u1eb7c v\u1edbi&nbsp;<code>sudo<\/code> ti\u1ec1n t\u1ed1. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 quy\u1ec1n, h\u00e3y xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/linux-users-and-groups\/\">Ng\u01b0\u1eddi d\u00f9ng v\u00e0 Nh\u00f3m<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<h2 id=\"example-1-preventing-configuration-drift\">V\u00ed d\u1ee5 1: Ng\u0103n ch\u1eb7n s\u1ef1 tr\u00f4i d\u1ea1t c\u1ea5u h\u00ecnh<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#example-1-preventing-configuration-drift\"><\/a><\/h2>\n<p>Tr\u00f4i c\u1ea5u h\u00ecnh x\u1ea3y ra khi c\u00f3 nh\u1eefng thay \u0111\u1ed5i kh\u00f4ng \u0111\u01b0\u1ee3c theo d\u00f5i \u0111\u1ed1i v\u1edbi t\u1ec7p c\u1ea5u h\u00ecnh h\u1ec7 th\u1ed1ng. Salt c\u00f3 th\u1ec3 gi\u00fap ng\u0103n ch\u1eb7n tr\u00f4i c\u1ea5u h\u00ecnh b\u1eb1ng c\u00e1ch \u0111\u1ea3m b\u1ea3o r\u1eb1ng t\u1ec7p \u0111\u01b0\u1ee3c kh\u00f4i ph\u1ee5c ngay l\u1eadp t\u1ee9c v\u1ec1 tr\u1ea1ng th\u00e1i an to\u00e0n khi c\u00f3 thay \u0111\u1ed5i. \u0110\u1ec3 th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y, tr\u01b0\u1edbc ti\u00ean ch\u00fang ta ph\u1ea3i \u0111\u1ec3 Salt qu\u1ea3n l\u00fd t\u1ec7p. Ph\u1ea7n n\u00e0y s\u1ebd s\u1eed d\u1ee5ng t\u1ec7p c\u1ea5u h\u00ecnh NGINX l\u00e0m v\u00ed d\u1ee5, nh\u01b0ng b\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn b\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o.<\/p>\n<h3 id=\"manage-your-file\">Qu\u1ea3n l\u00fd t\u1eadp tin c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#manage-your-file\"><\/a><\/h3>\n<p>1.Tr\u00ean m\u00e1y ch\u1ee7 Salt c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c cho c\u00e1c t\u1ec7p \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd c\u1ee7a b\u1ea1n trong&nbsp;<code>\/srv\/salt\/files<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir \/srv\/salt\/files\n<\/code><\/pre>\n<p>2.Tr\u00ean Salt master, h\u00e3y \u0111\u1eb7t t\u1ec7p&nbsp;<code>nginx.conf<\/code>, ho\u1eb7c b\u1ea5t k\u1ef3 t\u1ec7p n\u00e0o b\u1ea1n mu\u1ed1n qu\u1ea3n l\u00fd v\u00e0o&nbsp;<code>\/srv\/salt\/files<\/code>th\u01b0 m\u1ee5c.<\/p>\n<p>3.Tr\u00ean m\u00e1y ch\u1ee7 Salt c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t t\u1ec7p tr\u1ea1ng th\u00e1i \u0111\u1ec3 qu\u1ea3n l\u00fd t\u1ec7p c\u1ea5u h\u00ecnh NGINX:<\/p>\n<pre class=\"wp-block-code\"><code>\/etc\/nginx\/nginx.conf:\n  file.managed:\n    - source:\n      - salt:\/\/files\/nginx.conf\n    - makedirs: True<\/code><\/pre>\n<p>C\u00f3 hai \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p trong&nbsp;<code>.sls<\/code>t\u1ec7p n\u00e0y. \u0110\u01b0\u1eddng d\u1eabn t\u1ec7p \u0111\u1ea7u ti\u00ean l\u00e0 \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ebfn t\u1ec7p \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd c\u1ee7a b\u1ea1n tr\u00ean minion c\u1ee7a b\u1ea1n. \u0110\u01b0\u1eddng d\u1eabn th\u1ee9 hai, b\u00ean d\u01b0\u1edbi&nbsp;<code>source<\/code>v\u00e0 c\u00f3 ti\u1ec1n t\u1ed1 l\u00e0&nbsp;<code>salt:\/\/<\/code>, tr\u1ecf \u0111\u1ebfn \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p tr\u00ean m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n.&nbsp;<code>salt:\/\/<\/code>l\u00e0 \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p ti\u1ec7n l\u1ee3i \u00e1nh x\u1ea1 \u0111\u1ebfn&nbsp;<code>\/srv\/salt<\/code>.<\/p>\n<p>4.Tr\u00ean Salt master c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t t\u1ec7p top n\u1ebfu n\u00f3 ch\u01b0a t\u1ed3n t\u1ea1i v\u00e0 th\u00eam&nbsp;<code>nginx_conf.sls<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>base:\n  '*':\n    - nginx_conf<\/code><\/pre>\n<p>5.\u00c1p d\u1ee5ng tr\u1ea1ng th\u00e1i cao t\u1eeb ch\u1ee7 nh\u00e2n Salt c\u1ee7a b\u1ea1n \u0111\u1ec3 ch\u1ea1y&nbsp;<code>nginx_conf.sls<\/code>tr\u1ea1ng th\u00e1i \u0111\u00f3 tr\u00ean c\u00e1c thu\u1ed9c h\u1ea1 c\u1ee7a b\u1ea1n.<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' state.apply\n<\/code><\/pre>\n<h3 id=\"create-a-beacon\">T\u1ea1o m\u1ed9t Beacon<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#create-a-beacon\"><\/a><\/h3>\n<p>1.\u0110\u1ec3 \u0111\u01b0\u1ee3c th\u00f4ng b\u00e1o khi t\u1ec7p thay \u0111\u1ed5i, b\u1ea1n s\u1ebd c\u1ea7n&nbsp;<code>pyinotify<\/code>g\u00f3i Python. T\u1ea1o tr\u1ea1ng th\u00e1i Salt s\u1ebd x\u1eed l\u00fd vi\u1ec7c c\u00e0i \u0111\u1eb7t&nbsp;<code>pyinotify<\/code>g\u00f3i tr\u00ean minion c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>python-pip:\n  pkg.installed\n\npyinotify:\n  pip.installed:\n    - require:\n      - pkg: python-pip\n        <\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: \u0110\u00e8n b\u00e1o inotify ch\u1ec9 ho\u1ea1t \u0111\u1ed9ng tr\u00ean c\u00e1c h\u1ec7 \u0111i\u1ec1u h\u00e0nh c\u00f3 h\u1ed7 tr\u1ee3 h\u1ea1t nh\u00e2n inotify. Hi\u1ec7n t\u1ea1i, \u0111i\u1ec1u n\u00e0y kh\u00f4ng bao g\u1ed3m FreeBSD, macOS v\u00e0 Windows.<\/p>\n<p>2.Tr\u00ean m\u00e1y ch\u1ee7 Salt, t\u1ea1o m\u1ed9t&nbsp;<code>minion.d<\/code>th\u01b0 m\u1ee5c \u0111\u1ec3 l\u01b0u tr\u1eef t\u1ec7p c\u1ea5u h\u00ecnh beacon:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir \/srv\/salt\/files\/minion.d\n<\/code><\/pre>\n<p>3.B\u00e2y gi\u1edd h\u00e3y t\u1ea1o m\u1ed9t beacon s\u1ebd ph\u00e1t ra s\u1ef1 ki\u1ec7n m\u1ed7i khi&nbsp;<code>nginx.conf<\/code>file thay \u0111\u1ed5i tr\u00ean minion c\u1ee7a b\u1ea1n. T\u1ea1o&nbsp;<code>\/etc\/salt\/minion.d\/beacons.conf<\/code>file v\u00e0 th\u00eam c\u00e1c d\u00f2ng sau:<\/p>\n<pre class=\"wp-block-code\"><code>beacons:\n  inotify:\n    - files:\n        \/etc\/nginx\/nginx.conf:\n          mask:\n            - modify\n    - disable_during_state_run: True<\/code><\/pre>\n<p>4.\u0110\u1ec3 \u00e1p d\u1ee5ng hi\u1ec7u \u1ee9ng n\u00e0y cho minion c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o&nbsp;<code>file.managed<\/code>tr\u1ea1ng th\u00e1i Salt m\u1edbi:<\/p>\n<pre class=\"wp-block-code\"><code>\/etc\/salt\/minion.d\/beacons.conf:\n  file.managed:\n    - source:\n      - salt:\/\/files\/minion.d\/beacons.conf\n    - makedirs: True\n<\/code><\/pre>\n<p>5.Th\u00eam tr\u1ea1ng th\u00e1i m\u1edbi&nbsp;<code>packages<\/code>v\u00e0o&nbsp;<code>beacons<\/code>t\u1ec7p tr\u00ean c\u00f9ng c\u1ee7a Salt master:<\/p>\n<pre class=\"wp-block-code\"><code>base:\n  '*':\n    - nginx_conf\n    - packages\n    - beacons<\/code><\/pre>\n<p>6.\u00c1p d\u1ee5ng tr\u1ea1ng th\u00e1i cao t\u1eeb Salt master c\u1ee7a b\u1ea1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n nh\u1eefng thay \u0111\u1ed5i sau tr\u00ean minion c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' state.apply\n<\/code><\/pre>\n<p>7.M\u1edf m\u1ed9t shell kh\u00e1c cho Salt master c\u1ee7a b\u1ea1n v\u00e0 kh\u1edfi \u0111\u1ed9ng tr\u00ecnh ch\u1ea1y s\u1ef1 ki\u1ec7n Salt. B\u1ea1n s\u1ebd s\u1eed d\u1ee5ng tr\u00ecnh n\u00e0y \u0111\u1ec3 theo d\u00f5i c\u00e1c s\u1ef1 ki\u1ec7n thay \u0111\u1ed5i t\u1ec7p t\u1eeb beacon c\u1ee7a b\u1ea1n.<\/p>\n<pre class=\"wp-block-code\"><code>salt-run state.event pretty=True\n<\/code><\/pre>\n<p>8.Tr\u00ean Salt minion c\u1ee7a b\u1ea1n, h\u00e3y thay \u0111\u1ed5i&nbsp;<code>nginx.conf<\/code>t\u1ec7p c\u1ee7a b\u1ea1n, sau \u0111\u00f3 ki\u1ec3m tra shell tr\u00ecnh ch\u1ea1y s\u1ef1 ki\u1ec7n Salt c\u1ee7a b\u1ea1n. B\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t s\u1ef1 ki\u1ec7n nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>salt\/beacon\/salt-minion\/inotify\/\/etc\/nginx\/nginx.conf\t{\n    \"_stamp\": \"2018-10-10T13:53:47.163499\",\n    \"change\": \"IN_MODIFY\",\n    \"id\": \"salt-minion\",\n    \"path\": \"\/etc\/nginx\/nginx.conf\"\n}<\/code><\/pre>\n<p>L\u01b0u \u00fd r\u1eb1ng d\u00f2ng \u0111\u1ea7u ti\u00ean l\u00e0 t\u00ean s\u1ef1 ki\u1ec7n v\u00e0 bao g\u1ed3m t\u00ean minion Salt c\u1ee7a b\u1ea1n v\u00e0 \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ebfn t\u1ec7p \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd c\u1ee7a b\u1ea1n. Ch\u00fang t\u00f4i s\u1ebd s\u1eed d\u1ee5ng t\u00ean s\u1ef1 ki\u1ec7n n\u00e0y trong ph\u1ea7n ti\u1ebfp theo.<\/p>\n<p>9.\u0110\u1ec3 kh\u00f4i ph\u1ee5c&nbsp;<code>nginx.conf<\/code>t\u1ec7p v\u1ec1 tr\u1ea1ng th\u00e1i ban \u0111\u1ea7u, b\u1ea1n c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng tr\u1ea1ng th\u00e1i cao t\u1eeb Salt master c\u1ee7a m\u00ecnh.<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' state.apply nginx_conf\n<\/code><\/pre>\n<p>M\u1edf t\u1ec7p \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd c\u1ee7a b\u1ea1n tr\u00ean minion Salt v\u00e0 nh\u1eadn th\u1ea5y r\u1eb1ng thay \u0111\u1ed5i \u0111\u00e3 \u0111\u01b0\u1ee3c ho\u00e0n nguy\u00ean. Ch\u00fang t\u00f4i s\u1ebd t\u1ef1 \u0111\u1ed9ng h\u00f3a b\u01b0\u1edbc cu\u1ed1i c\u00f9ng n\u00e0y trong ph\u1ea7n ti\u1ebfp theo.<\/p>\n<h3 id=\"create-a-reactor\">T\u1ea1o m\u1ed9t l\u00f2 ph\u1ea3n \u1ee9ng<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#create-a-reactor\"><\/a><\/h3>\n<p>1.Tr\u00ean m\u00e1y ch\u1ee7 Salt c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o th\u01b0&nbsp;<code>\/srv\/reactor<\/code>m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir \/srv\/reactor\n<\/code><\/pre>\n<p>2.Sau \u0111\u00f3 t\u1ea1o t\u1ec7p tr\u1ea1ng th\u00e1i l\u00f2 ph\u1ea3n \u1ee9ng trong&nbsp;<code>\/srv\/reactor<\/code>th\u01b0 m\u1ee5c v\u00e0 bao g\u1ed3m n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>\/etc\/nginx\/nginx.conf:\n  local.state.apply:\n    - tgt: {{ data&#91;'id'] }}\n    - arg:\n      - nginx_conf<\/code><\/pre>\n<p>\u0110\u01b0\u1eddng d\u1eabn t\u1ec7p \u1edf d\u00f2ng \u0111\u1ea7u ti\u00ean ch\u1ec9 \u0111\u01a1n gi\u1ea3n l\u00e0 t\u00ean c\u1ee7a l\u00f2 ph\u1ea3n \u1ee9ng v\u00e0 c\u00f3 th\u1ec3 l\u00e0 b\u1ea5t k\u1ef3 t\u00ean n\u00e0o b\u1ea1n ch\u1ecdn.&nbsp;<code>tgt<\/code>, ho\u1eb7c m\u1ee5c ti\u00eau, l\u00e0 minion Salt s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c highstate. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, th\u00f4ng tin \u0111\u01b0\u1ee3c truy\u1ec1n \u0111\u1ebfn l\u00f2 ph\u1ea3n \u1ee9ng t\u1eeb s\u1ef1 ki\u1ec7n beacon \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 l\u1eadp tr\u00ecnh ch\u1ecdn \u0111\u00fang ID minion Salt. Th\u00f4ng tin n\u00e0y c\u00f3 s\u1eb5n d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>data<\/code>t\u1eeb \u0111i\u1ec3n.&nbsp;<code>arg<\/code>, ho\u1eb7c \u0111\u1ed1i s\u1ed1, l\u00e0 t\u00ean c\u1ee7a t\u1ec7p tr\u1ea1ng th\u00e1i Salt \u0111\u01b0\u1ee3c t\u1ea1o \u0111\u1ec3 qu\u1ea3n l\u00fd t\u1ec7p&nbsp;<code>nginx.conf<\/code>.<\/p>\n<p>3.Tr\u00ean Salt master c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o m\u1ed9t&nbsp;<code>reactor.conf<\/code>t\u1ec7p v\u00e0 bao g\u1ed3m t\u1ec7p tr\u1ea1ng th\u00e1i l\u00f2 ph\u1ea3n \u1ee9ng m\u1edbi:<\/p>\n<pre class=\"wp-block-code\"><code>reactor:\n  - 'salt\/beacon\/*\/inotify\/\/etc\/nginx\/nginx.conf':\n    - \/srv\/reactor\/nginx_conf_reactor.sls<\/code><\/pre>\n<p>T\u1ec7p n\u00e0y&nbsp;<code>reactor.conf<\/code>v\u1ec1 c\u01a1 b\u1ea3n l\u00e0 danh s\u00e1ch c\u00e1c t\u00ean s\u1ef1 ki\u1ec7n kh\u1edbp v\u1edbi c\u00e1c t\u1ec7p tr\u1ea1ng th\u00e1i l\u00f2 ph\u1ea3n \u1ee9ng. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang t\u00f4i \u0111\u00e3 s\u1eed d\u1ee5ng glob (*) trong t\u00ean s\u1ef1 ki\u1ec7n thay v\u00ec ch\u1ec9 \u0111\u1ecbnh ID minion c\u1ee5 th\u1ec3 (c\u00f3 ngh\u0129a l\u00e0 b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o \u0111\u1ed1i v\u1edbi a&nbsp;<code>nginx.conf<\/code>tr\u00ean b\u1ea5t k\u1ef3 minion n\u00e0o c\u0169ng s\u1ebd k\u00edch ho\u1ea1t l\u00f2 ph\u1ea3n \u1ee9ng), nh\u01b0ng b\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y ID minion c\u1ee5 th\u1ec3 ph\u00f9 h\u1ee3p h\u01a1n v\u1edbi nhu c\u1ea7u c\u1ee7a m\u00ecnh.<\/p>\n<p>4.Kh\u1edfi \u0111\u1ed9ng l\u1ea1i&nbsp;<code>salt-master<\/code>d\u1ecbch v\u1ee5 \u0111\u1ec3 \u00e1p d\u1ee5ng&nbsp;<code>reactor.conf<\/code>t\u1ec7p:<\/p>\n<pre class=\"wp-block-code\"><code>systemctl restart salt-master\n<\/code><\/pre>\n<p>5.Tr\u00ean Salt minion c\u1ee7a b\u1ea1n, h\u00e3y thay \u0111\u1ed5i t\u1ec7p&nbsp;<code>nginx.conf<\/code>. Sau \u0111\u00f3 ki\u1ec3m tra shell event runner c\u1ee7a b\u1ea1n v\u00e0 b\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t s\u1ed1 s\u1ef1 ki\u1ec7n. Sau \u0111\u00f3, h\u00e3y ki\u1ec3m tra&nbsp;<code>nginx.conf<\/code>t\u1ec7p c\u1ee7a b\u1ea1n. Nh\u1eefng thay \u0111\u1ed5i b\u1ea1n \u0111\u00e3 th\u1ef1c hi\u1ec7n s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c ho\u00e0n nguy\u00ean.<\/p>\n<p>Xin ch\u00fac m\u1eebng, b\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 bi\u1ebft c\u00e1ch qu\u1ea3n l\u00fd tr\u00f4i c\u1ea5u h\u00ecnh b\u1eb1ng Salt. T\u1ea5t c\u1ea3 c\u00e1c b\u1ea3n c\u1eadp nh\u1eadt trong t\u01b0\u01a1ng lai&nbsp;<code>nginx.conf<\/code>ph\u1ea3i \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean Salt master v\u00e0 \u00e1p d\u1ee5ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>state.apply<\/code>.<\/p>\n<h2 id=\"example-2-monitoring-minion-memory-usage-with-slack\">V\u00ed d\u1ee5 2: Theo d\u00f5i vi\u1ec7c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb Minion v\u1edbi Slack<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#example-2-monitoring-minion-memory-usage-with-slack\"><\/a><\/h2>\n<p>Salt \u0111i k\u00e8m v\u1edbi m\u1ed9t s\u1ed1 \u0111\u00e8n hi\u1ec7u gi\u00e1m s\u00e1t h\u1ec7 th\u1ed1ng. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang ta s\u1ebd gi\u00e1m s\u00e1t m\u1ee9c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb c\u1ee7a m\u1ed9t minion v\u00e0 g\u1eedi th\u00f4ng b\u00e1o Slack khi m\u1ee9c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb v\u01b0\u1ee3t ng\u01b0\u1ee1ng nh\u1ea5t \u0111\u1ecbnh. \u0110\u1ed1i v\u1edbi ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd c\u1ea7n t\u1ea1o m\u1ed9t bot Slack, l\u1ea5y m\u00e3 th\u00f4ng b\u00e1o OAuth v\u00e0 c\u1ea5u h\u00ecnh bot \u0111\u1ec3 c\u00f3 th\u1ec3 g\u1eedi tin nh\u1eafn Slack thay m\u1eb7t b\u1ea1n.<\/p>\n<h3 id=\"configure-your-slack-app\">C\u1ea5u h\u00ecnh \u1ee9ng d\u1ee5ng Slack c\u1ee7a b\u1ea1n<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#configure-your-slack-app\"><\/a><\/h3>\n<ol>\n<li><a href=\"https:\/\/api.slack.com\/apps?new_app=1\" target=\"_blank\" rel=\"noreferrer noopener\">T\u1ea1o \u1ee9ng d\u1ee5ng Slack<\/a>&nbsp;.<\/li>\n<li>T\u1eeb trang c\u00e0i \u0111\u1eb7t \u1ee9ng d\u1ee5ng Slack, \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn OAuth &amp; Quy\u1ec1n.<\/li>\n<li>Sao ch\u00e9p M\u00e3 th\u00f4ng b\u00e1o truy c\u1eadp OAuth.<\/li>\n<li>Trong Ph\u1ea1m vi, ch\u1ecdn&nbsp;<strong>G\u1eedi tin nh\u1eafn d\u01b0\u1edbi d\u1ea1ng &lt;t\u00ean \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n&gt;<\/strong>&nbsp;.<\/li>\n<\/ol>\n<h3 id=\"create-a-beacon-1\">T\u1ea1o m\u1ed9t Beacon<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#create-a-beacon-1\"><\/a><\/h3>\n<p>1.Tr\u00ean Salt master c\u1ee7a b\u1ea1n, h\u00e3y m\u1edf ho\u1eb7c t\u1ea1o t\u1ec7p&nbsp;<code>\/srv\/salt\/files\/minion.d\/beacons.conf<\/code>v\u00e0 th\u00eam c\u00e1c d\u00f2ng sau. N\u1ebfu b\u1ea1n \u0111\u00e3 c\u00f3 t\u1ec7p&nbsp;<code>beacons.conf<\/code>t\u1eeb v\u00ed d\u1ee5 tr\u01b0\u1edbc, h\u00e3y b\u1ecf d\u00f2ng \u0111\u00f3 \u0111i&nbsp;<code>beacons:<\/code>, nh\u01b0ng \u0111\u1ea3m b\u1ea3o ph\u1ea7n c\u00f2n l\u1ea1i c\u1ee7a c\u1ea5u h\u00ecnh \u0111\u01b0\u1ee3c th\u1ee5t l\u1ec1 hai kho\u1ea3ng tr\u1eafng:<\/p>\n<pre class=\"wp-block-code\"><code>beacons:\n  memusage:\n    beacon.present:\n      - percent: 15%\n      - interval: 15<\/code><\/pre>\n<p>Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang t\u00f4i \u0111\u1ec3 t\u1ef7 l\u1ec7 s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb \u1edf m\u1ee9c th\u1ea5p \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o s\u1ef1 ki\u1ec7n beacon s\u1ebd k\u00edch ho\u1ea1t v\u00e0 kho\u1ea3ng th\u1eddi gian s\u1ef1 ki\u1ec7n \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh 15 gi\u00e2y. Trong m\u00f4i tr\u01b0\u1eddng s\u1ea3n xu\u1ea5t, b\u1ea1n n\u00ean thay \u0111\u1ed5i c\u00e1c gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh c\u00e1c gi\u00e1 tr\u1ecb h\u1ee3p l\u00fd h\u01a1n.<\/p>\n<p>2.\u00c1p d\u1ee5ng tr\u1ea1ng th\u00e1i cao t\u1eeb Salt master c\u1ee7a b\u1ea1n \u0111\u1ec3 th\u00eam ng\u1ecdn h\u1ea3i \u0111\u0103ng v\u00e0o l\u00ednh c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' state.apply\n<\/code><\/pre>\n<p>3.N\u1ebfu b\u1ea1n ch\u01b0a th\u1ef1c hi\u1ec7n, h\u00e3y m\u1edf m\u1ed9t shell kh\u00e1c trong Salt master c\u1ee7a b\u1ea1n v\u00e0 kh\u1edfi \u0111\u1ed9ng tr\u00ecnh ch\u1ea1y s\u1ef1 ki\u1ec7n:<\/p>\n<pre class=\"wp-block-code\"><code>salt-run state.event pretty=True\n<\/code><\/pre>\n<p>4.Sau v\u00e0i gi\u00e2y, gi\u1ea3 s\u1eed b\u1ea1n \u0111\u00e3 \u0111\u1eb7t ph\u1ea7n tr\u0103m b\u1ed9 nh\u1edb \u0111\u1ee7 th\u1ea5p, b\u1ea1n s\u1ebd th\u1ea5y s\u1ef1 ki\u1ec7n nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>salt\/beacon\/salt-minion\/memusage\/\t{\n    \"_stamp\": \"2018-10-10T15:48:53.165368\",\n    \"id\": \"salt-minion\",\n    \"memusage\": 20.7\n}<\/code><\/pre>\n<p>L\u01b0u \u00fd r\u1eb1ng d\u00f2ng \u0111\u1ea7u ti\u00ean l\u00e0 t\u00ean s\u1ef1 ki\u1ec7n v\u00e0 ch\u1ee9a t\u00ean minion. Ch\u00fang ta s\u1ebd s\u1eed d\u1ee5ng t\u00ean s\u1ef1 ki\u1ec7n n\u00e0y trong ph\u1ea7n ti\u1ebfp theo.<\/p>\n<h3 id=\"create-a-reactor-1\">T\u1ea1o m\u1ed9t l\u00f2 ph\u1ea3n \u1ee9ng<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#create-a-reactor-1\"><\/a><\/h3>\n<p>1.Tr\u00ean m\u00e1y ch\u1ee7 Salt c\u1ee7a b\u1ea1n, h\u00e3y t\u1ea1o th\u01b0&nbsp;<code>\/srv\/reactor<\/code>m\u1ee5c n\u1ebfu b\u1ea1n ch\u01b0a th\u1ef1c hi\u1ec7n:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir \/srv\/reactor\n<\/code><\/pre>\n<p>2.Sau \u0111\u00f3 t\u1ea1o m\u1ed9t t\u1ec7p tr\u1ea1ng th\u00e1i ph\u1ea3n \u1ee9ng v\u00e0 th\u00eam c\u00e1c d\u00f2ng sau, \u0111\u1ea3m b\u1ea3o thay \u0111\u1ed5i c\u00e1c kh\u00f3a&nbsp;<code>channel<\/code>,&nbsp;<code>api_key<\/code>, v\u00e0&nbsp;<code>from_name<\/code>\u0111\u1ec3 ph\u1ea3n \u00e1nh c\u00e1c gi\u00e1 tr\u1ecb mong mu\u1ed1n c\u1ee7a b\u1ea1n. \u0110\u00e2y&nbsp;<code>api_key<\/code>l\u00e0 m\u00e3 th\u00f4ng b\u00e1o OAuth m\u00e0 b\u1ea1n \u0111\u00e3 sao ch\u00e9p \u1edf b\u01b0\u1edbc 3 c\u1ee7a ph\u1ea7n&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/monitoring-salt-minions-with-beacons\/#configure-your-slack-app\">C\u1ea5u h\u00ecnh \u1ee9ng d\u1ee5ng Slack c\u1ee7a b\u1ea1n<\/a>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>Send memusage to Slack:\n  local.slack.post_message:\n    - tgt: {{ data&#91;'id'] }}\n    - kwarg:\n        channel: \"#general\"\n        api_key: \"xoxp-451607817121-453578458246...\"\n        message: \"{{ data&#91;'id'] }} has hit a memory usage threshold: {{ data&#91;'memusage'] }}%.\"\n        from_name: \"Memusage Bot\"<\/code><\/pre>\n<p>Ch\u00fang t\u00f4i \u0111ang s\u1eed d\u1ee5ng t\u1eeb&nbsp;<code>data<\/code>\u0111i\u1ec3n \u0111\u01b0\u1ee3c cung c\u1ea5p cho l\u00f2 ph\u1ea3n \u1ee9ng t\u1eeb s\u1ef1 ki\u1ec7n memusage \u0111\u1ec3 \u0111i\u1ec1n ID minion v\u00e0 m\u1ee9c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb.<\/p>\n<p>3.M\u1edf ho\u1eb7c t\u1ea1o&nbsp;<code>reactor.conf<\/code>t\u1ec7p. N\u1ebfu b\u1ea1n \u0111\u00e3 c\u00f3&nbsp;<code>reactor.conf<\/code>t\u1ec7p t\u1eeb v\u00ed d\u1ee5 tr\u01b0\u1edbc, h\u00e3y b\u1ecf d\u00f2ng \u0111\u00f3 \u0111i&nbsp;<code>reactor:<\/code>, nh\u01b0ng \u0111\u1ea3m b\u1ea3o ph\u1ea7n c\u00f2n l\u1ea1i c\u1ee7a c\u1ea5u h\u00ecnh \u0111\u01b0\u1ee3c th\u1ee5t l\u1ec1 hai kho\u1ea3ng tr\u1eafng:<\/p>\n<pre class=\"wp-block-code\"><code>reactor:\n  - 'salt\/beacon\/*\/memusage\/':\n    - '\/srv\/reactor\/memusage.sls'<\/code><\/pre>\n<p>4.Kh\u1edfi \u0111\u1ed9ng l\u1ea1i&nbsp;<code>salt-master<\/code>\u0111\u1ec3 \u00e1p d\u1ee5ng&nbsp;<code>reactor.conf<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>systemctl restart salt-master\n<\/code><\/pre>\n<p>5.Trong shell event-runner c\u1ee7a b\u1ea1n, sau v\u00e0i gi\u00e2y, b\u1ea1n s\u1ebd th\u1ea5y m\u1ed9t s\u1ef1 ki\u1ec7n nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>salt\/job\/20181010161053393111\/ret\/salt-minion\t{\n    \"_stamp\": \"2018-10-10T16:10:53.571956\",\n    \"cmd\": \"_return\",\n    \"fun\": \"slack.post_message\",\n    \"fun_args\": &#91;\n        {\n            \"api_key\": \"xoxp-451607817121-453578458246-452348335312-2328ce145e5c0c724c3a8bc2afafee17\",\n            \"channel\": \"#general\",\n            \"from_name\": \"Memusage Bot\",\n            \"message\": \"salt-minion has hit a memory usage threshold: 20.7.\"\n        }\n    ],\n    \"id\": \"salt-minion\",\n    \"jid\": \"20181010161053393111\",\n    \"retcode\": 0,\n    \"return\": true,\n    \"success\": true\n}<\/code><\/pre>\n<p>6.M\u1edf Slack v\u00e0 b\u1ea1n s\u1ebd th\u1ea5y \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n \u0111\u00e3 th\u00f4ng b\u00e1o cho ph\u00f2ng.<\/p>\n<p>Xin ch\u00fac m\u1eebng, gi\u1edd b\u1ea1n \u0111\u00e3 bi\u1ebft c\u00e1ch theo d\u00f5i m\u1ee9c s\u1eed d\u1ee5ng b\u1ed9 nh\u1edb c\u1ee7a Salt minion b\u1eb1ng t\u00edch h\u1ee3p Slack. Salt c\u0169ng c\u00f3 th\u1ec3 theo d\u00f5i t\u1ea3i CPU, m\u1ee9c s\u1eed d\u1ee5ng \u0111\u0129a v\u00e0 m\u1ed9t s\u1ed1 th\u1ee9 kh\u00e1c. Tham kh\u1ea3o ph\u1ea7n Th\u00f4ng tin th\u00eam b\u00ean d\u01b0\u1edbi \u0111\u1ec3 bi\u1ebft th\u00eam t\u00e0i nguy\u00ean.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/beacons\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u v\u1ec1 Salt Beacons<\/a><\/li>\n<li><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/beacons\/all\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">M\u00f4-\u0111un \u0111\u00e8n hi\u1ec7u mu\u1ed1i<\/a><\/li>\n<li><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/reactor\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u l\u00f2 ph\u1ea3n \u1ee9ng mu\u1ed1i<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>M\u1ed7i h\u00e0nh \u0111\u1ed9ng \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1edfi Salt, ch\u1eb3ng h\u1ea1n nh\u01b0 \u00e1p d\u1ee5ng tr\u1ea1ng th\u00e1i cao ho\u1eb7c kh\u1edfi \u0111\u1ed9ng l\u1ea1i m\u1ed9t minion, s\u1ebd t\u1ea1o ra m\u1ed9t s\u1ef1 ki\u1ec7n.&nbsp;Beacon&nbsp;ph\u00e1t ra c\u00e1c s\u1ef1 ki\u1ec7n cho c\u00e1c quy tr\u00ecnh kh\u00f4ng ph\u1ea3i salt, ch\u1eb3ng h\u1ea1n nh\u01b0 thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i h\u1ec7 th\u1ed1ng ho\u1eb7c thay \u0111\u1ed5i t\u1ec7p. H\u01b0\u1edbng d\u1eabn n\u00e0y<\/p>\n","protected":false},"author":1,"featured_media":36031,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124],"tags":[],"class_list":["post-34983","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-salt"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34983"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34983\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/36031"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}