Mercurial > hg > Papers > 2022 > kiyama-thesis
view paper/text/experiment.tex @ 5:ff6f870063b5
add experiment
author | kiyama <e185758@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 27 Jan 2022 19:28:25 +0900 |
parents | c48aa8767fe6 |
children | 271532d37fe5 |
line wrap: on
line source
\chapter{監視環境} 本研究では,システム障害の早期発見のために学科システムに監視システムの構築方法とその際に発生するアラートルールの属人化を防ぐためのスラッシュコマンドを用いたアラートルールの編集方法を提案する. \section{検証環境} 本実験では全ての監視システムをコンテナ上に構築しており,docker-compose.ymlファイルからpodmanでコンテナを作成する形を取っている. 作成したdocker-compose.ymlファイルを載せる. \lstinputlisting[label=src:Queue.h, caption=docker-compose.yml]{src/docker-compose.yml} サービスの死活監視はprometheus,ログ収集はloki,それらのデータ可視化はgrafana,アラート送信はalertmanagerを用いて構築している. システム監視の構成図を\ref{fig:monitoring-system}に示す. exporter,alertmanagerはprometheusのコンポーネントとなっており,exporterで各サービスのメトリック情報をprometheusに対して送信している. また,prometheusの独自のクエリ言語であるpromQLで設定した条件を満たした際にalertmanagerに対してアラートを送信する.\\ 使用するクエリ言語がlogQLに変更しているがlokiもpromethrus同様にログを収集し,アラートを送信している. \begin{figure}[htbp] \begin{center} \includegraphics[width=110mm]{figs/monitoring-system.png} \caption[monitoring-system]{構成図.} \label{fig:monitoring-system} \end{center} \end{figure} \section{システム監視} 各サービスのリソース・死活監視はpromethrusを用いて行っている.\\ prometheusはブラウザで収集したデータを表示する機能を持っている. 図\ref{fig:prometheus-expr}に各expoterサーバーからprometheusに集めた情報をブラウザを通じて表示する様子を示す. \newpage \begin{figure}[htbp] \begin{center} \includegraphics[width=110mm]{figs/prometheus-expr.png} \caption[monitoring-system]{promethrusでのグラフを用いたデータの可視化.} \label{fig:prometheus-expr} \end{center} \end{figure} しかし,prometheusのグラフでは表示のカスタマイズや可視化したダッシュボードの登録,ログイン認証をサポートしていない. そこでデータの可視化はgrafanaを用いた. 図\ref{fig:grafana-login}にgrafanaでのログイン画面を示す.\\ 図\ref{fig:grafana-prometheus}に示すようにgrafanaを用いてダッシュボードの作成ができる. また,これらのダッシュボードは自身でカスタムしたりgrafanaに登録されてあるダッシュボードをインポートすることで,よく使用する情報を登録することが可能である. \begin{figure}[htbp] \begin{center} \includegraphics[width=110mm]{figs/grafana-login.png} \caption[grafana-login]{grafanaでのlogin画面.} \label{fig:grafana-login} \end{center} \end{figure} \newpage \begin{figure}[htbp] \begin{center} \includegraphics[width=110mm]{figs/grafana-prometheus.png} \caption[grafana-prometheus]{grafanaでカスタムされたダッシュボード.} \label{fig:grafana-prometheus} \end{center} \end{figure} \section{ログ収集} 障害が発生したサーバーがアクセス可能であればログを確認することはできるが,何らかの原因でアクセス出来ない場合はログを確認する手段がない.\\ そこで各サーバーのログを収集する事でサーバーの死活状態に関わらず原因調査が可能である.また,grafanaではlogQLを用いて絞り込みが出来る為特定までにかかるコストが低くなると考える.\\ 提案システムでは,ログ収集にはlokiを用いている. loki自体に収集したログを表示する機能は無く,grafnaと連携してログの可視化を行う. 図\ref{fig:loki-grafana}がlokiとgrafanaが連携してlogを可視化している様子である.\\ \begin{figure}[htbp] \begin{center} \includegraphics[width=110mm]{figs/loki-grafana.png} \caption[loki-grafana]{lokiで収集したデータをgrafanaで可視化.} \label{fig:loki-grafana} \end{center} \end{figure} \newpage 上記は閲覧者がlogQLを用いることでログの絞り込みが可能だが検索結果が保存されない. その為一般的には,図\ref{fig:loki-dashboard}のようにprometheus同様カスタムダッシュボードを使用して可視化を行う. 図\ref{fig:loki-dashboard}ではlokiに収集されたログの単位時間あたりの総数とerrorの文字列が含まれるログの総数,単位時間あたりのログの総数をグラフで表したものになっている. \begin{figure}[htbp] \begin{center} \includegraphics[width=110mm]{figs/loki-dashboard.png} \caption[loki-dashboard]{grafanaのダッシュボードでlogを表示.} \label{fig:loki-dashboard} \end{center} \end{figure} \section{アラート送信} prometheus,loki共に設定ファイルにalertmanagerとの疎通を取れるurlを記入することで連携が可能。 alertmanagerからmattermostに対しアラートを送信する際はmattermostのwebhook機能を用いて送信している。 以下がアラート送信の様子である。