4
|
1 title: ログ取集・管理をメッセージング経由で適切に設定する手法の提案
|
|
2 author: Mizuki Kiyama
|
|
3 profiles: 琉球大学
|
|
4
|
|
5 # 本研究での取り組み
|
|
6
|
|
7
|
|
8 * 学科システムへの監視システム提案
|
|
9 * 今まではZabbixでシステムを監視していた
|
|
10 * Prometheus, Loki, Grafanaに置き換える
|
|
11
|
|
12 * Mattermostのスラッシュコマンドを用いたアラートルールの編集
|
|
13 * 運用を通して必要なログを選択していく仕組みを構築した
|
|
14
|
|
15
|
|
16 # 学科システム
|
|
17 * 学科システムは約300人の学生と教員に対して様々なサービスを提供している
|
|
18 * 学内ネットワークや、貸出用の仮想マシン (Virutal Machine: VM) など、授業や研究を円滑に進める為のサービスを、24時間365日提供している
|
|
19 * 学科システムはシステム管理チームによって管理されている
|
|
20 * 有志の職員と学生を中心に結成されている.
|
|
21 * 教師1名、職員2名、学生数名
|
|
22
|
|
23 # 安定した運用の為の構築
|
|
24 * 一般的にシステムを保守・運用する上で障害は必ず発生する
|
|
25 * 悪意のある障害:外部からの攻撃
|
|
26 * 悪意のない障害:ハードウェアなどの物理故障
|
|
27 * 原因追求の為、様々なサービスの死活管理とログ調査が必要である
|
|
28 * 問題発生時にアラートを送信する監視システム(Prometherus)
|
|
29 * ログの情報を集約する(Loki)
|
|
30 * これらの情報を可視化する(Grafana)
|
|
31
|
|
32 # 学科システムのトラブルの例
|
|
33 1. クラウドサーバーのHDDが物理故障していた為アクセス不可 (8/2)
|
|
34 2. サーバー交換により復旧 (8/6)
|
|
35 3. 計画停電によりオンプレサーバーが故障 (8/10)
|
|
36 4. 復旧時にファームウェアアップデートによりKVMのIPv4が停止 (8/17)
|
|
37
|
|
38
|
|
39 1.はHDD故障アラームを処理していれば防げた可能性がある
|
|
40
|
|
41 # Gitlabトラブルの対処
|
|
42 * Gitlabの自動アップデートはメジャーアップデートに対応してなかった
|
|
43 * 学生に対しGitlabから不正なアクセスのメールを確認していたが調査しなかった
|
|
44 * Gitlabの脆弱性を利用され攻撃に利用された
|
|
45 * 新しいバージョンのGitlabを導入しアカウントを移行することで復旧
|
|
46
|
|
47
|
|
48 Gitlabのログを監視していれば防げた可能性がある
|
|
49
|
|
50 # 監視システムでの問題
|
|
51 * アラート送信の機能は運用する中で過不足が無いように調整が必要
|
|
52 * 通常の編集方法ではサーバーにログインが必要
|
|
53 * 作業内容はScrapboxに記述することになっている
|
|
54 * 他のシス管メンバーが変更を見落とす可能性がある
|
|
55
|
|
56 # アラート編集の問題の解決案
|
|
57 * オープンな環境(Mattermost)でアラートを編集できるようにする
|
|
58 * アラートルール変更をした際の見落としを防げる
|
|
59
|
|
60 # 研究目的
|
|
61 * システム障害の早期発見・発生時の円滑な対応を目的とした監視システムの提案
|
|
62 * 組織としての理解度向上を目的としたアラートルール編集方法の提案
|
|
63
|
|
64 # 使用するサービス
|
|
65 * Prometheus
|
|
66 * オープンソースの監視システム
|
|
67 * コンポーネントはExporterからデータを取得する
|
|
68 * Exporter
|
|
69 * 対象となるサービスのデータを Prometheusに送信する
|
|
70 * Alertmanager
|
|
71 * Prometheusのアラート管理コンポーネントツール
|
|
72
|
|
73 # 使用するサービス
|
|
74 * Grafana
|
|
75 * 収集されたデータをダッシュボードを用いて可視化する
|
|
76 * Grafana Loki(Loki)
|
|
77 * オープンソースのログ収集ツール
|
|
78 * 後述するPromtailからログを取得する
|
|
79 * Promtail
|
|
80 * サービスのログをlokiに対して送信するツール
|
|
81
|
|
82 # 監視システム(サービス監視)
|
|
83 下図のようにサービスの情報を収集しブラウザで確認できる
|
|
84
|
|
85 <img src="./img/monitoring_system-Page-3.drawio.svg" width="1000px">
|
|
86
|
|
87
|
|
88 # 監視システム(サービス監視)
|
|
89 grafanaでダッシュボードを用いて可視化
|
|
90
|
|
91 <img src="./img/grafana-prometheus.png" width="1000px">
|
|
92 <!-- ![grafana](./img/grafana-prometheusのコピー.png) -->
|
|
93
|
|
94 # 監視システム(ログ収集)
|
|
95 下図がサービスのログを収集しブラウザで確認できるまでの流れである
|
|
96
|
|
97 <img src="./img/loki-ページ3.drawio.svg" width="1000px">
|
|
98
|
|
99 # 監視システム(ログ収集)
|
|
100 grafanaのダッシュボードを用いて可視化
|
|
101 <img src="./img/loki-dashboard.png" width="1000px">
|
|
102
|
|
103 # 監視システム(アラート送信)
|
|
104 右図がログに対しアラートルールを設定しMattermostからアラートを確認出来るまでの流れである
|
|
105
|
|
106
|
|
107 <img src="./img/monitoring_system-Page-1.svg" width="1000px">
|
|
108
|
|
109 # 監視システム(アラート送信)
|
|
110 Mattermostに送信されるアラートは以下のような形式
|
|
111
|
|
112 <img src="./img/Mattermost-alert.png" width="1000px">
|
|
113
|
|
114
|
|
115 # Mattermostでのアラートルール編集
|
|
116 /から始まるコマンドを打つ事で設定したWeb APIにGET/POSTリクエストを送信可能
|
|
117 以下がMattermostのスラッシュコマンドからアラートを編集するまでの流れ
|
|
118
|
|
119
|
|
120 <img src="./img/alert-figur.drawio.svg" width="1000px">
|
|
121
|
|
122
|
|
123
|
|
124 # スラッシュコマンド一覧
|
|
125 以下が今回作成したスラッシュコマンド一覧
|
|
126
|
|
127 | コマンド | 機能 |
|
|
128 | ---- | ---- |
|
|
129 | /alert add $name $label $pattern $time | アラートルールの追加 |
|
|
130 |||
|
|
131 | /alert list all $name | アラートルールの表示 |
|
|
132 |||
|
|
133 | /alert delete $name | アラートルールの削除 |
|
|
134
|
|
135
|
|
136 # Mattermostでのアラートルール編集
|
|
137 以下のようにコマンドを用いることでアラートが編集可能
|
|
138 図はaddを実行した結果
|
|
139
|
|
140 <img src="./img/add2.png" width="1000px">
|
|
141
|
|
142
|
|
143 # Mattermostでのアラートルール編集
|
|
144 以下のようにコマンドを用いることでアラートが編集可能
|
|
145 図はlist allを実行した際の結果
|
|
146
|
|
147 <img src="./img/list.png" width="1000px">
|
|
148
|
|
149
|
|
150 # Mattermostでのアラートルール編集
|
|
151 以下のようにコマンドを用いることでアラートが編集可能
|
|
152 図はdeleteを実行した際の結果
|
|
153
|
|
154 <img src="./img/delete.png" width="1000px">
|
|
155
|
|
156 # 設定例
|
|
157 * 外部公開されているシステムの攻撃を検知する事が可能だと考える
|
|
158 * 外部公開されているシステムの脆弱性をついた攻撃はPODTメソッドで行われる事が多い事から、一定時間に大量のPOSTがあった際に検知するよう設定することで攻撃を事前に防げる
|
|
159
|
|
160 * 誤ったアラートルールを設定してしまい必要以上にアラートが発生する場合にはdeleteコマンドを使うことでMattermostからすぐに削除することができる
|
|
161
|
|
162 # まとめ
|
|
163 * 障害対応のための監視システムを提案した
|
|
164 * Mattermostからアラートルールを編集できるスラッシュコマンドを作成した
|
|
165 * CLI上での変更方法と比べて情報共有にかかる手間や調べる手間が少ない事から第三者が確認しやすいと考える
|
|
166
|
|
167 # 今後の課題
|
|
168 * 収集したデータのバックアップや提案環境の構築場所を運用にするに当たって改善する必要がある
|
|
169 * 本研究では監視対象を限定したので稼働しているサービスすべてを監視する必要がある
|
|
170 * 現在はオンプレ環境でのみ動作している為クラウドにセカンダリを構築し冗長化する必要がある
|
|
171 * このアラートルール設定では管理者の技量に左右されてしまう為必要なアラートの選択
|
|
172 * チャットツールでは過去に遡っての確認が難しい為Gitlab Scrapboxとの連携する必要がある |