<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: mizuki04</title>
    <description>The latest articles on Forem by mizuki04 (@mizuki04).</description>
    <link>https://forem.com/mizuki04</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F445936%2Fbdbcdabb-441f-4990-becb-bcb7968be652.jpg</url>
      <title>Forem: mizuki04</title>
      <link>https://forem.com/mizuki04</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mizuki04"/>
    <language>en</language>
    <item>
      <title>[Tips] Rails6起動時のError対応</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Wed, 03 Feb 2021 17:13:02 +0000</pubDate>
      <link>https://forem.com/mizuki04/tips-rails6-9lm</link>
      <guid>https://forem.com/mizuki04/tips-rails6-9lm</guid>
      <description>&lt;h3&gt;
  
  
  Errorの対処
&lt;/h3&gt;

&lt;p&gt;localへrailsを入れただけでは、以下のエラーが出てしまった為、起動までのステップを備忘として載せる。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cannot load such file -- nokogiri/nokogiri (LoadError)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記の対応としては、arm64版のモジュールが不必要に入っていることによって、エラーが起きていた為。一旦それを解消する。&lt;/p&gt;

&lt;p&gt;①一旦nokogiriをアンインストール。&lt;/p&gt;

&lt;p&gt;②Gemfileにgem 'nokogiri', '~&amp;gt; 最新版'を記載&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/sparklemotion/nokogiri/releases"&gt;https://github.com/sparklemotion/nokogiri/releases&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;③nokogiri (1.11.1-arm64-darwin)をGemfile.lockから削除&lt;/p&gt;

&lt;p&gt;④gem install nokogiri&lt;/p&gt;

&lt;p&gt;上記の問題はこれで解消したが、それだけではwebpackerのエラーが発生するため。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Webpacker configuration file not found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⑤rails webpacker:install&lt;/p&gt;

&lt;p&gt;上記を行うことによって解消され、ひとまず起動。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[BookLog] グレートカンパニー</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Tue, 02 Feb 2021 18:58:17 +0000</pubDate>
      <link>https://forem.com/mizuki04/booklog-48k5</link>
      <guid>https://forem.com/mizuki04/booklog-48k5</guid>
      <description>&lt;h3&gt;
  
  
  概要
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ソフトエッジ&lt;br&gt;
・ 信頼&lt;br&gt;
・ 知性&lt;br&gt;
・ チーム&lt;br&gt;
・ テイスト&lt;br&gt;
・ ストーリー&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ハードエッジ&lt;br&gt;
・ スピード&lt;br&gt;
・ コスト&lt;br&gt;
・ サプライチェーン&lt;br&gt;
・ 流通&lt;br&gt;
・ 資本効率&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;戦略的基盤&lt;br&gt;
・ 市場&lt;br&gt;
・ 顧客&lt;br&gt;
・ 競合他社&lt;br&gt;
・ 競争優位性&lt;br&gt;
・ 変革者&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;本書の中心的な主題はソフトエッジについて語られている。そして最も重要な軸として捉えられている。(Forbsの観察結果という根拠に基づいて)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ソフトエッジで優位にたつと、ブランド認知が高まり、利益率が上がり、得意先が増えて、熱心な従業員が増える。コモディティ化している市場から頭ひとつ抜けるキッカケ&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ソフトエッジが優れている会社は、戦略上大きなミスを犯しても、生き延びられる場合が少なくない、忠実さと情熱と献身が、強いソフトエッジの配当&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ハードエッジがしっかりしていても、束の間の利益しかあげられない、ハードエッジは技術、softwareなどの知的資産が安くなるにつれて簡単に真似されてしまう。&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  memo
&lt;/h3&gt;

&lt;p&gt;・新しいことを学んだり、初めてぶつかった問題を解決する能力⇨流動性知性&lt;br&gt;
・学んだ結果を応用する能力⇨結晶性知性&lt;/p&gt;

&lt;p&gt;上記の能力を「何かしらの事柄をやり抜く」という姿勢が研鑽していく為、結果的には困難な状況に対して粘り強く取り組めるかということが最重要（スマートである）とされている。&lt;/p&gt;

&lt;p&gt;・データと人間的真実の間にある、見つけるのが難しいポイント（最適打球点）がテイスト&lt;br&gt;
※必ずしも新たに作られた物である必要はない、真似でもいい&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Booklog] ベタープログラマ(O'Reilly)</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Mon, 01 Feb 2021 08:52:10 +0000</pubDate>
      <link>https://forem.com/mizuki04/booklog-4p53</link>
      <guid>https://forem.com/mizuki04/booklog-4p53</guid>
      <description>&lt;p&gt;[備忘のためのメモ]&lt;/p&gt;

&lt;h2&gt;
  
  
  ch3_少ないコードを書く
&lt;/h2&gt;

&lt;p&gt;※コメントを書くときに意識すること&lt;/p&gt;

&lt;p&gt;•コード自身は、何をどのようにしてを説明しているため、コメントでは「なぜ」を説明すること、しかし何故を説明する際にコードがかつて行っていたことを記載しないようにすること。&lt;/p&gt;

&lt;h2&gt;
  
  
  ch10_バグ狩り
&lt;/h2&gt;

&lt;p&gt;※問題解決を速やかに行う為に&lt;/p&gt;

&lt;p&gt;•素早く、バグを特定する為にはバイナリチョップを行う、具体的にはコードのパスをひとつづつ実行するのではなく、事象の連鎖のはじめと終わりから始める。それから問題空間を二分して、中間点が良い状態か悪い状態かを調べる。それを繰り返して二分探索的に問題を特定する。（よくない打ち手としては1ステップずつ実行すること）&lt;/p&gt;

&lt;h2&gt;
  
  
  ch13_二つのシステムの物語
&lt;/h2&gt;

&lt;p&gt;※優れた構成を産むために&lt;/p&gt;

&lt;p&gt;• コードを書き始める前に、意図して事前の設計を行うこと。多くのプロジェクトは、実際に開発する前にこの点で失敗し、そこには対立する緊張がある。設計が足りなさすぎず、その上過剰設計でないこと。&lt;/p&gt;

&lt;p&gt;• 開発を進めながら、設計を明瞭に維持し続けること。&lt;/p&gt;

&lt;p&gt;• ソフトウェアの全体設計の責任が与えられて、責任を持つチームであること。&lt;/p&gt;

&lt;p&gt;• 設計を変更することを恐れないこと。永久に変わらないものは無し。&lt;/p&gt;

&lt;p&gt;• チームにふさわしい人々を入れること。そこには設計者、プログラマ、マネージャが含まれる。開発チームを適切な大きさにすること。&lt;strong&gt;彼らが健全な関係になるようにする。彼らの関係が必然的にコードの構造へ反映される。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• 設計上の決定を、決定するためのすべての情報を分かっている適切な時期に行う。まだ行えない設計に関する決定を遅らせること。&lt;/p&gt;

&lt;h2&gt;
  
  
  ch24_学びを愛して生きる
&lt;/h2&gt;

&lt;p&gt;※スキル獲得のドレイファスモデルを読んで要点の抽出&lt;/p&gt;

&lt;p&gt;• 初級者&lt;br&gt;
経験が学習を導く、規則を破って独自のやり方を試すが、うまくいかなくなると行き詰まってしまう。関係のない詳細を省くことができない。&lt;/p&gt;

&lt;p&gt;• 中級者&lt;br&gt;
全体像を持つことで、未知な問題に対処したり、問題に対する方法論的な筋道を計画できる。新たな規則の限界も把握し始める。&lt;/p&gt;

&lt;p&gt;• 上級者&lt;br&gt;
全体像の深い理解、自らの経験からだけでなく他人の経験から学び、理解して吸収できる。問題に対するデザインパターンを持っている。&lt;/p&gt;

&lt;p&gt;• 専門家&lt;br&gt;
専門家は理解を極めた結果、直感を持っているので、規則を必要とせずに答えが自然にわかる。&lt;/p&gt;

&lt;h2&gt;
  
  
  ch31_一生懸命でなく、賢く
&lt;/h2&gt;

&lt;p&gt;※新たな作業が依頼されたら&lt;/p&gt;

&lt;p&gt;• 今実際に必要とされているのが、なんであるかを調べること。初期の段階でTooMuchにやることを積み上げるのはやめること。&lt;/p&gt;

&lt;p&gt;パレートの法則&lt;br&gt;
&lt;a href="https://blog.kairosmarketing.net/marketing-strategy/how-to-leverage-pareto-law-into-marketing-activities/"&gt;https://blog.kairosmarketing.net/marketing-strategy/how-to-leverage-pareto-law-into-marketing-activities/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[DevSecOPS] #7 CI/CD自動化パイプラインの実現①構想編</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Thu, 10 Sep 2020 20:05:31 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-7-ci-cd-5ami</link>
      <guid>https://forem.com/mizuki04/devsecops-7-ci-cd-5ami</guid>
      <description>&lt;h1&gt;
  
  
  CI/CD自動化パイプラインの実現①構想編
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1.はじめに
&lt;/h2&gt;

&lt;p&gt;前回の記事によって、アプリケーションを包括的にウォッチする環境が概ね整ったことが分かります。そこから、メモリリークやDBのスペック調整を一通り行い、クラウドサービス上で動く現行環境のチューニングや細かいセキュリティ上の問題を一度解消することができる手がかりが得られると思います。&lt;/p&gt;

&lt;p&gt;・前回の記事（見える化を行ったら(APサーバ編)）&lt;br&gt;
&lt;a href="https://dev.to/mizuki04/devsecops-1hf"&gt;https://dev.to/mizuki04/devsecops-1hf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;しかし、監視基盤から得られる諸問題は各サービスの状況に依存したスペシフィックな問題である為、打ち手について今回は割愛します。&lt;/p&gt;

&lt;p&gt;今回取り上げるのは、一度上記のように環境をブラッシュアップした時にさらにもう一つ抜本的な改革を進める為にはという問いに対する一つの実行例を述べます。&lt;/p&gt;

&lt;p&gt;一般的にサービスをリリースして安定的にユーザを獲得できている場合、最も避けたいのはダウンタイムだと思います。そこで気になるポイントとして、本番環境のデプロイに時間がかかっている、だったり手動によるデプロイの為ヒューマンエラーに繋がる等の事象が見受けられます。&lt;/p&gt;

&lt;p&gt;できるならmasterブランチにマージを行ったら、そのあとはコーヒー☕️でも飲みながら一服をしたいと思うのは自然な発想です。&lt;/p&gt;

&lt;p&gt;それを実現するのが、CI/CD自動化パイプラインの実現です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;※CI/CDとは「Continuous Integration／Continuous Delivery」の略で、
日本語では継続的インティグレーション／継続的デリバリーといいます。
CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして
自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法を意味します。
CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;パイプラインのポテンシャルを引き出して、ダウンタイムを最小にする為には、アプリケーションをDockerlizeし、コンテナベースの運用にすることがほぼ不可欠であるのでそちらも踏まえて今後記載していきます。&lt;/p&gt;

&lt;h2&gt;
  
  
  2.ソース管理の環境と選定サービス
&lt;/h2&gt;

&lt;p&gt;上記を実現するにあたり、ソースを管理しているサービスによって実現の方法は異なります。概ね、Github/Gitlabどちらかになるかと思いますが、今回はGitlabのユースケースを用いてこのプロジェクトの解説を行います。&lt;/p&gt;

&lt;p&gt;Githubの場合はGithubActionsやCircleCIなどが一般的なように思え、Gitlabの場合は、CICDのサードパーティサービスに加え、Gitlab標準のGitlabCIという機能があります。&lt;/p&gt;

&lt;p&gt;また、AWS環境ならばCodepipelineなどのマネージドサービスが存在します。&lt;/p&gt;

&lt;p&gt;予算や規模感に応じて取れる選択肢は変わりますが、コスト・時間的なパフォーマンス・周辺機能の充実で選ぶと間違いないかと思います。従量課金制のサービスが多い中、今回のユースケースでは、コストが無料であるGitlabCIを選択致しました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a5NWA9Eg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6d0hrkbs9l8q6y1hbpux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a5NWA9Eg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6d0hrkbs9l8q6y1hbpux.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3.クラウドサービスの環境とコンテナオーケストレーションツール
&lt;/h2&gt;

&lt;p&gt;AWS/GCP/Azureそれぞれの環境に合わせて、CI/CD周りの自動化を行うならばコンテナオーケストレーションツールの利用もほぼ必須だと言えるかと思います。&lt;/p&gt;

&lt;p&gt;今回は、AWS環境のEC2インスタンスベースで運用を行なっていたサービスを移行する為&lt;br&gt;
AWSフルマネージド型のコンテナオーケストレーションサービスであるECSを選定致しました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cXofU1w7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dyrs8qprrx03z9b1dorz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cXofU1w7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dyrs8qprrx03z9b1dorz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/jp/ecs/"&gt;https://aws.amazon.com/jp/ecs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;他にはAWSでも、フルマネージド型の Kubernetes サービスであるEKSも登場しています。ECSを選定した理由としては、現在行っている運用作業を減らすとともに、可視化や拡張性を担保できるなど以下のメリットが考えられます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;可用性

&lt;ul&gt;
&lt;li&gt;障害時も予約したタスク数で自動復旧できる&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;性能・拡張性

&lt;ul&gt;
&lt;li&gt;スケーラビリティ&lt;/li&gt;
&lt;li&gt;ECSではインスタンス数/タスク数を増やすだけ&lt;/li&gt;
&lt;li&gt;台数調整・インスタンスタイプなどはCloudFormationから&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;運用 / 保守性

&lt;ul&gt;
&lt;li&gt;コンテナ化にあたり、ビルドやデプロイと言った作業を自動化できる&lt;/li&gt;
&lt;li&gt;監視の追加(XX_exporterなど)は公式イメージを追加するだけ&lt;/li&gt;
&lt;li&gt;コンテナ追加が容易な為ツール導入でテストカバレッジ等を可視化できる&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;セキュリティ

&lt;ul&gt;
&lt;li&gt;AWS側に保持している、コンテナをECRと組み合わせて診断できる&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;移行性

&lt;ul&gt;
&lt;li&gt;別のコンテナオーケストレーションとは異なり、仕組みがシンプルで、馴染みのあるEC2をそのまま利用することができる等です。（VPC,ELB,EC2 etc...）。&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;パイプライン＋コンテナオーケストレーションツールによって、デプロイの自動化・GUIベースでのアプリケーションの管理が可能となります。&lt;/p&gt;

&lt;p&gt;今回目標としていたのは、&lt;strong&gt;0.5~1時間程度のデプロイに手動で掛かっていた時間を完全に自動化することです。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;次回からは具体的なhowの話を行いたいと思います。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Tips] 中銀カプセルタワービル=Docker説</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Sun, 16 Aug 2020 18:22:44 +0000</pubDate>
      <link>https://forem.com/mizuki04/tips-docker-5bfj</link>
      <guid>https://forem.com/mizuki04/tips-docker-5bfj</guid>
      <description>&lt;p&gt;今回初めてのTips投稿ですが、何かの理解の一助になればなと思ったものについて、備忘も込めて投稿していきます。今回はDockerの概念を簡単に説明するには、、、と考えた時にこんなやり方もあるのではと模索した結果です。名付けて、&lt;/p&gt;

&lt;p&gt;&lt;em&gt;「中銀カプセルタワービル=Docker説」&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GSbdzXu1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wyaelz6gwbvly0xhgf49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GSbdzXu1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wyaelz6gwbvly0xhgf49.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://speakerdeck.com/mizuki0414/zhong-yin-kahuserutawa-equals-dockershuo"&gt;https://speakerdeck.com/mizuki0414/zhong-yin-kahuserutawa-equals-dockershuo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
    <item>
      <title>[DevSecOPS] #6 見える化を行ったら(DBサーバ編)</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Sun, 16 Aug 2020 17:55:50 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-6-db-3n07</link>
      <guid>https://forem.com/mizuki04/devsecops-6-db-3n07</guid>
      <description>&lt;h2&gt;
  
  
  1.はじめに
&lt;/h2&gt;

&lt;p&gt;運用を行う上でDBの状態の把握は一般的なサーバの監視項目に加えて、優先度の高い物であると認識しています。DB自体について知りたいことはAPの特性によって変わるかと思われますが、今回も一般的な項目について整理していきたいと思います。また今回はNoSQLベースのDBであるMongoを想定して記載致します。&lt;/p&gt;

&lt;h2&gt;
  
  
  2.DBサーバへの監視項目
&lt;/h2&gt;

&lt;p&gt;基本的な監視項目についてはダッシュボードを参考に以下を整理しました。&lt;br&gt;
・DBコネクション数&lt;br&gt;
・オペレーション数（CRUD）の増減率&lt;br&gt;
・DBのメモリアロケーションの増減率&lt;br&gt;
・(In-Out)Byte数の増減率&lt;br&gt;
・Lockの実行数&lt;br&gt;
・Pagefaultの合計数&lt;/p&gt;

&lt;h2&gt;
  
  
  3.Metrics
&lt;/h2&gt;

&lt;p&gt;では実際のクエリを記載していきます。演算子に関しては一旦無視していただき、Mongoから取得したMongoDBexporterのメトリクスについてをメインで考えています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DBコネクション数
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irate(mongodb_connections[1m])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;オペレーション数（CRUD）の増減率
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irate(mongodb_mongod_op_counters_total[1m])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;DBのメモリアロケーション
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irate(mongodb_memory[1m])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;(In-Out)Byte数の増減率
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irate(mongodb_network_bytes_total[1m])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Lockの実行数
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongodb_mongod_global_lock_current_queue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Pagefaultの合計数
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mongodb_extra_info_page_faults_total[1m]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4.結び
&lt;/h2&gt;

&lt;p&gt;ダッシュボードをインポートして使用するのでも十分ですが、本質的にはクエリの詳細についての理解を怠ると何を表しているのか正確に把握できない為自戒を込めて記載致しました。アラート発火の閾値に関しては、運用を行いつつチューニングすることが望ましい為今回はメトリクスの紹介となりました。&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>[DevSecOPS] #5 見える化を行ったら(APサーバ編)</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Sat, 15 Aug 2020 12:50:44 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-1hf</link>
      <guid>https://forem.com/mizuki04/devsecops-1hf</guid>
      <description>&lt;h2&gt;
  
  
  1.はじめに
&lt;/h2&gt;

&lt;p&gt;モニタリング（監視）の環境を整備することによって、見える化を行ったら次はどんな情報が必要で、何を整理する必要があるか考えなければならないですね。&lt;/p&gt;

&lt;p&gt;基本的には必要な情報はサーバ郡の役割によって異なる為、大きくAPサーバとDBサーバで分けて検討します。&lt;/p&gt;

&lt;p&gt;求められるビジネスロジックによって必要なメトリクスは異なるが、今回はオーソドックスであると思われるものについてまとめていきたいと思います。&lt;/p&gt;

&lt;p&gt;また今回想定している環境はprometheusの為、他の基盤を用いている方はメトリクスを自分の基盤と読み替えていただけると幸いです。&lt;/p&gt;

&lt;p&gt;前提として、各メトリクスを取得する手段は、goによって作成されている**.exporterを使用しpull型の取得であるとしています。&lt;/p&gt;

&lt;h2&gt;
  
  
  2.APサーバへの基本的な監視項目
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;閾値&lt;/th&gt;
&lt;th&gt;scrape_interval&lt;/th&gt;
&lt;th&gt;evaluation_interval&lt;/th&gt;
&lt;th&gt;alert_interval&lt;/th&gt;
&lt;th&gt;型&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;死活監視&lt;/td&gt;
&lt;td&gt;回&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;bool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU使用率&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;5min&lt;/td&gt;
&lt;td&gt;avg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;メモリ使用率&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;5min&lt;/td&gt;
&lt;td&gt;avg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ストレージ空き容量&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;5min&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ロードアベレージ&lt;/td&gt;
&lt;td&gt;数&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;avg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;diskIO&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;diskbusy&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;10sec&lt;/td&gt;
&lt;td&gt;1min&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;必要最低限を満たす大勢として、検討したメトリクスとしては上記のようなものでした。&lt;/p&gt;

&lt;p&gt;上記の値を取得してアラートを発火するには、Grafana,もしくPrometheus側のアラートマネージャにクエリを記載しなければならないのですが、Prometheusへ蓄積した様々なメトリクスの参照は、PromQLという独自のクエリ言語を用いて行います。&lt;/p&gt;

&lt;p&gt;また、GrafanaのTemplating機能を使うと、クエリに対して変数が適用できますが、IaC的な運用を目指すならばアラートマネージャ側でクエリを保持して管理する方が良いかと思われます。&lt;/p&gt;

&lt;h2&gt;
  
  
  3.Dataの取得方法
&lt;/h2&gt;

&lt;p&gt;さて、ここで上記の項目値の取得方法の例を記載します。その前に必要な演算子は以下のようなものがあります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;max,min&lt;br&gt;
任意の範囲内でのデータの最大、最小&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;avg&lt;br&gt;
avg演算子は、レコードごとに格納されたスカラー値の平均値を返します。レコードのvalueが配列（Range Vector）の場合は適用できません。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rate()とirate()&lt;br&gt;
rate()とirate()関数はどちらも、ある時間範囲で取得したデータが、1秒あたり平均どれだけ増加しているかを計算します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;withoutとby&lt;br&gt;
without句は上述の通り、指定したラベルを無視して集計関数を適用します。実際にwithout(cpu)を実行した場合の生データは以下のように、cpuラベルが欠落した状態になります。{instance="docker104:9100",job="node",mode="user"} 0.0005000000000002558&lt;br&gt;
by句は逆に、指定したラベルに絞って、つまり他のラベルを無視して集計関数を適用します。by(mode)を実行すると、mode以外のすべてのラベルが欠落した状態になります。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4.実際のクエリの例
&lt;/h2&gt;

&lt;h4&gt;
  
  
  CPU使用率
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;sum by (instance)(avg(irate(node_cpu_seconds_total{instance=~"$node",mode=~"user"}[5m])) without(cpu) * 100)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;指定インスタンス($node)の、単位時間($interval)内での1秒ごとのCPU使用率の平均を表示します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",instance="docker104:9100",job="node",mode="iowait"} 1.57
node_cpu{cpu="cpu0",instance="docker104:9100",job="node",mode="system"} 42.51
node_cpu{cpu="cpu0",instance="docker104:9100",job="node",mode="user"}   74.37
node_cpu{cpu="cpu1",instance="docker104:9100",job="node",mode="iowait"} 5.13
node_cpu{cpu="cpu1",instance="docker104:9100",job="node",mode="system"} 34.1
node_cpu{cpu="cpu1",instance="docker104:9100",job="node",mode="user"}   72.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ロードアベレージ
&lt;/h4&gt;

&lt;p&gt;node_load1{instance=~"13.231.98.14:9100"}&lt;/p&gt;

&lt;h4&gt;
  
  
  死活監視
&lt;/h4&gt;

&lt;p&gt;単純な死活監視については別途Exporter(Blackboxexporter)が出ていますが、何らかの基本的な値が一定間隔でnullになった場合に発火するでも問題ないと考えています。&lt;/p&gt;

&lt;h4&gt;
  
  
  メモリ
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;process_resident_memory_bytes
process_virtual_memory_bytes
( node_memory_MemFree_bytes{instance=~'$node'} - node_memory_Buffers_bytes{instance=~'$node'} + node_memory_Cached_bytes{instance=~'$node'} + node_memory_SwapCached_bytes{instance=~'$node'} + node_memory_Slab_bytes{instance=~'$node'} + node_memory_PageTables_bytes{instance=~'$node'} + node_memory_VmallocUsed_bytes{instance=~'$node'} ) /  node_memory_MemTotal_bytes{instance=~'$node'} * 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ディスク使用量
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100.0 - 100 * (node_filesystem_avail_bytes{instance=~'$node',device !~'tmpfs',device!~'by-uuid'} / node_filesystem_size_bytes{instance=~'13.231.98.14:9100',device !~'tmpfs',device!~'by-uuid'}) or 100.0 - 100 * (node_filesystem_avail{instance=~'13.231.98.14:9100',device !~'tmpfs',device!~'by-uuid'} / node_filesystem_size{instance=~'13.231.98.14:9100',device !~'tmpfs',device!~'by-uuid'})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ディスクIO&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rate(node_disk_read_time_seconds_total[5s] / rate(node_disk_reads_completed_total[5s]) * 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(rate(node_disk_read_time_seconds_total{instance=~"13.231.98.14:9100"}[5s] / rate(node_disk_reads_completed_total{instance=~"13.231.98.14:9100"}[5s]) )* 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5.監視から得られる示唆
&lt;/h2&gt;

&lt;p&gt;上記で挙げたような、項目は本当に一般的なものですが、注意深く見ると、時系列と共にデータから得られる示唆が沢山あります。&lt;/p&gt;

&lt;p&gt;例えば、今回のケースでは社内のadminユーザが業務時間と共に複数セッションを開始しメモリの負荷が業務開始と共に上がっている、といったような示唆がありました。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mQf_mwUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/krlopq1drcrzhdtcrab2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mQf_mwUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/krlopq1drcrzhdtcrab2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;そこから得られるのは、インスタンスタイプを直ぐにあげてメモリを増強する。ではなく、セッションの開く数を減らしてもらうように呼び掛けたり、admin周りの機能改修によってメモリの使用を抑えるような打ち手も考えられます。&lt;/p&gt;

&lt;p&gt;結びとしては、監視⇨障害検知といったことだけではなく、スペックの最適化やシステムの使い方まで話が発展できる為、良い基盤の構築は業務を支える力強い味方になってくれると考えています。&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>[DevSecOps] #4 Prometheus + MongoDB監視導入手順</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Thu, 06 Aug 2020 04:39:26 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-4-prometheus-mongodb-1f9</link>
      <guid>https://forem.com/mizuki04/devsecops-4-prometheus-mongodb-1f9</guid>
      <description>&lt;h1&gt;
  
  
  Prometheus + MongoDB監視導入手順
&lt;/h1&gt;

&lt;h2&gt;
  
  
  ①はじめに
&lt;/h2&gt;

&lt;p&gt;当記事は前提として、Prometheusサーバがすでに構築されていることを前提とする。詳しい構築手順は別資料参照(#Prometheus+Grafana監視基盤導入手順)&lt;/p&gt;

&lt;h2&gt;
  
  
  ②Installing the MongoDB exporter
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MongoDB&lt;/strong&gt; exporter は右に記載のGitからCloneできる Percona’s GitHub &lt;a href="https://github.com/percona/mongodb_exporter"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;goやdockerを使ってインストールを行うことができるが今回は環境の依存性を考慮してバイナリファイルを実行する形式について説明をする。&lt;/p&gt;

&lt;p&gt;また、下記のバイナリファイルを実施するにあたりMongoDB自体にも設定を行う必要がある。&lt;/p&gt;

&lt;p&gt;まずはインストール。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;mongodb-exporter
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;mongodb-exporter
&lt;span class="nv"&gt;$ &lt;/span&gt;wget https://github.com/percona/mongodb_exporter/releases/download/v0.7.1/mongodb_exporter-0.7.1.linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;次に解凍をして。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;tar &lt;/span&gt;xvzf mongodb_exporter-0.7.1.linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;おそらく右のファイルが解凍されると思う: &lt;strong&gt;mongodb_exporter, LICENSE, README.md, CHANGELOG.md&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;サービスを実行していくにあたり、Prometheusにもモニタリング用のユーザを作成する必要があるがこちらは(#Prometheus+Grafana監視基盤導入手順)で実施済みのため割愛する。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;useradd &lt;span class="nt"&gt;-rs&lt;/span&gt; /bin/false prometheus
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo mv &lt;/span&gt;mongodb_exporter /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ③MongoDBの設定
&lt;/h2&gt;

&lt;p&gt;MongoDB監視を行うにあたり、exporterがDBにアクセスできるようにモニタリングユーザ作成と、環境変数のパスを通してやる必要がある。（デフォルトポートをしようしていない場合はそれも設定する。）&lt;/p&gt;

&lt;p&gt;MongoDB認証は&lt;strong&gt;–auth flag&lt;/strong&gt;をMongoShellから立ててやる必要がある。デフォルトでは未設定なので、以下のように実行していく。まずはMongoのプロセスが生きているかを確認する。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;mongod
mongodb  13468  1.1  6.9 1490632 281728 ? Ssl  Jan05 2838:27 /usr/bin/mongod &lt;span class="nt"&gt;--unixSocketPrefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/mongodb &lt;span class="nt"&gt;--config&lt;/span&gt; /etc/mongodb.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mongoコマンドでMongoインスタンスにログインする。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;mongo &lt;span class="nt"&gt;--port&lt;/span&gt; 27017
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exiporter用に &lt;strong&gt;administrator account&lt;/strong&gt;をcluster monitor roleを付与して作成する。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;use admin
db.createUser&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;
    user: &lt;span class="s2"&gt;"mongodb_exporter"&lt;/span&gt;,
    &lt;span class="nb"&gt;pwd&lt;/span&gt;: &lt;span class="s2"&gt;"password"&lt;/span&gt;,
    roles: &lt;span class="o"&gt;[&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt; role: &lt;span class="s2"&gt;"clusterMonitor"&lt;/span&gt;, db: &lt;span class="s2"&gt;"admin"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
        &lt;span class="o"&gt;{&lt;/span&gt; role: &lt;span class="s2"&gt;"read"&lt;/span&gt;, db: &lt;span class="s2"&gt;"local"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;]&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;正しく作成されていれば、以下のメッセージが出力される。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Successfully added user: &lt;span class="o"&gt;{&lt;/span&gt;                        
        &lt;span class="s2"&gt;"user"&lt;/span&gt; : &lt;span class="s2"&gt;"mongodb_exporter"&lt;/span&gt;,              
        &lt;span class="s2"&gt;"roles"&lt;/span&gt; : &lt;span class="o"&gt;[&lt;/span&gt;                               
                &lt;span class="o"&gt;{&lt;/span&gt;                                 
                        &lt;span class="s2"&gt;"role"&lt;/span&gt; : &lt;span class="s2"&gt;"clusterMonitor"&lt;/span&gt;,
                        &lt;span class="s2"&gt;"db"&lt;/span&gt; : &lt;span class="s2"&gt;"admin"&lt;/span&gt;            
                &lt;span class="o"&gt;}&lt;/span&gt;,                                
                &lt;span class="o"&gt;{&lt;/span&gt;                                 
                        &lt;span class="s2"&gt;"role"&lt;/span&gt; : &lt;span class="s2"&gt;"read"&lt;/span&gt;,          
                        &lt;span class="s2"&gt;"db"&lt;/span&gt; : &lt;span class="s2"&gt;"local"&lt;/span&gt;            
                &lt;span class="o"&gt;}&lt;/span&gt;                                 
        &lt;span class="o"&gt;]&lt;/span&gt;                                         
&lt;span class="o"&gt;}&lt;/span&gt;                                                 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MongoDB instanceを再起動する。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;db.adminCommand&lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; shutdown: 1 &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mongod &lt;span class="nt"&gt;--auth&lt;/span&gt; &lt;span class="nt"&gt;--port&lt;/span&gt; 27017 &lt;span class="nt"&gt;--config&lt;/span&gt; /etc/mongodb.conf &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;次に&lt;strong&gt;MongoDB URI&lt;/strong&gt; を以下のように変更する。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MONGODB_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mongodb://mongodb_exporter:password@localhost:27017
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ④MongoDB exporterサービス起動設定を行う
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;/lib/systemd/system&lt;/em&gt;へ移動し、サービスファイルを作成する。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /lib/systemd/system/
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo touch &lt;/span&gt;mongodb_exporter.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;MongoDB Exporter
&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prometheus

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;simple
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always
&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/bin/mongodb_exporter

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記でサービス起動をデーモン化&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start mongodb_exporter.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これで、サーバリスタート時でも再起動が自動でかかる。&lt;/p&gt;

&lt;p&gt;Percona’s &lt;strong&gt;MongoDB exporter&lt;/strong&gt; は port 9216で動作するので、一旦動いているか確認する。以下のようにメトリックスの情報が取れていればOK&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo curl http://localhost:9216/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0
go_gc_duration_seconds{quantile="1"} 0
go_gc_duration_seconds_sum 0
go_gc_duration_seconds_count 0
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⑤ メトリクス取得に関する起動オプション
&lt;/h2&gt;

&lt;p&gt;Prometheusから起動を確認できたら次は起動オプションについて説明する。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aXhpg6J_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2ry61pqx6wwqsjn00m4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aXhpg6J_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2ry61pqx6wwqsjn00m4l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;先ほどはサービスファイルを作成して起動をした。だが起動時にうまく環境変数を読み込めない等の事象が散見される為、以下のように念の為環境変数指定の起動オプションを実施する。&lt;/p&gt;

&lt;p&gt;サンプルだが以下のような、コマンド例となる。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./mongodb_exporter &lt;span class="nt"&gt;--mongodb&lt;/span&gt;.uri&lt;span class="o"&gt;=&lt;/span&gt;mongodb://user:passward@127.0.0.1:27017 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;--mongodb.uriオプションで渡せる引数はmongo環境変数の内容である。またこのときBasic認証をオンにしていると、Prometheusからexporterにアクセスする時に引数を指定してアクセスをしないとならない為、必ず$HTTP_AUTHがNullであることを確認する。&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⑥ダッシュボード作成
&lt;/h2&gt;

&lt;p&gt;別紙で説明した通り、データソースをインポートして、ダッシュボードのソースを指定する。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DhdfHUmi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/srm5luosmi1tuj32t8xm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DhdfHUmi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/srm5luosmi1tuj32t8xm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;既存のダッシュボードを使いたい場合は、Jsonをさらにインポート&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XWCuUo5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eugwd9ucat7nersif1hs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XWCuUo5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eugwd9ucat7nersif1hs.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;インポートした後に、クエリの設定をしてやればDB監視の、ダッシュボードが作成できる。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wN-s19t4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wnn37lsujjxcmxbst8jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wN-s19t4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wnn37lsujjxcmxbst8jy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>[DevSecOps] #3 Prometheus,Grafanaを使用したサーバ監視基盤の構築手順</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Thu, 06 Aug 2020 04:31:41 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-3-prometheus-grafana-n2b</link>
      <guid>https://forem.com/mizuki04/devsecops-3-prometheus-grafana-n2b</guid>
      <description>&lt;h1&gt;
  
  
  Prometheus,Grafanaを使用したサーバ監視基盤の構築手順
&lt;/h1&gt;

&lt;h2&gt;
  
  
  目次--------------------------------
&lt;/h2&gt;

&lt;h3&gt;
  
  
  0.はじめに
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1.Architecture
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2.Prometheus導入手順
&lt;/h3&gt;

&lt;h3&gt;
  
  
  3.Node_exporter導入手順
&lt;/h3&gt;

&lt;h3&gt;
  
  
  4.Grafana導入手順①(インストール＆初期設定)
&lt;/h3&gt;

&lt;h3&gt;
  
  
  5.Grafana導入手順②(ダッシュボード初期設定)
&lt;/h3&gt;

&lt;h2&gt;
  
  
  -----------------------------------
&lt;/h2&gt;

&lt;h2&gt;
  
  
  0.はじめに
&lt;/h2&gt;

&lt;p&gt;監視運用を行う上で、クラウド環境上の既存ツールを利用しているが、グラフの描画が見にくかったり、アラート通知の設定が複雑だったり、サーバ増築時の追加設定が面倒だったりと痒いところに手が届かないポイントが幾つかあるかと思います。そんな時にオススメできるのがPrometheus(監視)+Grafana(可視化)の監視体制がオススメです。具体的には以下の点が容易に実装できることがメリットです。またPrometheusはSoundcloud(&lt;a href="https://soundcloud.com/"&gt;https://soundcloud.com&lt;/a&gt;)社がリリースしているツールであり、Soundcloudのサービスに馴染みがある方もいるのではないかと思います。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;監視対象のサーバーから情報を取得 &amp;amp; 保管&lt;/li&gt;
&lt;li&gt;保管済みデータに対して集計クエリを発行できる&lt;/li&gt;
&lt;li&gt;しきい値を超えた場合のアラート (メール、Slack、がんばればTwilioで電話)&lt;/li&gt;
&lt;li&gt;柔軟なアラート設定 (同じエラーはまとめて通知とかの設定ができる)&lt;/li&gt;
&lt;li&gt;構築が比較的容易&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1.Architecture
&lt;/h2&gt;

&lt;p&gt;まず、各ツールの役割は以下のようになっております。&lt;/p&gt;

&lt;p&gt;①Prometheus : サーバ監視基盤&lt;br&gt;
②Grafana : Prometheusのデータを可視化＆アラート検知/作成する&lt;br&gt;
③Node_exporter : 被監視サーバのリソースデータをPrometheusへPushする&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F4-v_PsR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rrhct2lkm4qie20ra0et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F4-v_PsR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rrhct2lkm4qie20ra0et.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今回のアーキテクチャはPrometheus,Grafanaをそれぞれ一つのEC2インスタンスに導入し稼働させる構成としています。また監視対象のサーバはAPサーバ群(n台)としています。&lt;/p&gt;
&lt;h2&gt;
  
  
  2.Prometheus導入手順
&lt;/h2&gt;
&lt;h2&gt;
  
  
  環境
&lt;/h2&gt;

&lt;p&gt;Amazon Linux 2 AMI (HVM), SSD Volume Type&lt;br&gt;
Prometheus 2.3.2&lt;/p&gt;

&lt;p&gt;今回はAWSに作成されたEC2インスタンスを利用して構築していきます。IPアドレスはそれぞれの環境に合わせて変更ください。&lt;/p&gt;
&lt;h2&gt;
  
  
  Prometheusの導入
&lt;/h2&gt;

&lt;p&gt;Prometheusサーバにssh接続をし以下の手順で導入を行っていきます。&lt;/p&gt;
&lt;h3&gt;
  
  
  port 開放
&lt;/h3&gt;

&lt;p&gt;プロメテウスサーバーはデフォルトだと9090ポートでlistenするので開放します。(解放済みの場合はスキップ)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;firewall-cmd &lt;span class="nt"&gt;--add-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9090/tcp &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public &lt;span class="nt"&gt;--permanent&lt;/span&gt;
firewall-cmd &lt;span class="nt"&gt;--reload&lt;/span&gt;
firewall-cmd &lt;span class="nt"&gt;--list-ports&lt;/span&gt; &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prometheus Serverのインストール
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/prometheus/prometheus/releases/download/v&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;/prometheus-&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.linux-amd64.tar.gz
&lt;span class="nb"&gt;tar &lt;/span&gt;zxvf prometheus-&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.linux-amd64.tar.gz
&lt;span class="nb"&gt;mv &lt;/span&gt;prometheus-&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.linux-amd64 promethus-server
&lt;span class="nb"&gt;cd &lt;/span&gt;promethus-server
&lt;span class="nb"&gt;cp &lt;/span&gt;prometheus.yml prometheus.yml.org
&lt;span class="o"&gt;(&lt;/span&gt;ver.は任意&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;解凍後のディレクトリに入りprometheus.ymlを編集する。- targets:以下に監視対象のサーバip:9100を追加していく&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# my global config&lt;/span&gt;
&lt;span class="na"&gt;global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scrape_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;15s&lt;/span&gt; &lt;span class="c1"&gt;# Set the scrape interval to every 15 seconds. Default is every 1 minute.&lt;/span&gt;
  &lt;span class="na"&gt;evaluation_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15s&lt;/span&gt; &lt;span class="c1"&gt;# Evaluate rules every 15 seconds. The default is every 1 minute.&lt;/span&gt;
  &lt;span class="c1"&gt;# scrape_timeout is set to the global default (10s).&lt;/span&gt;

&lt;span class="c1"&gt;# Alertmanager configuration&lt;/span&gt;
&lt;span class="na"&gt;alerting&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;alertmanagers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# - alertmanager:9093&lt;/span&gt;

&lt;span class="c1"&gt;# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.&lt;/span&gt;
&lt;span class="na"&gt;rule_files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# - "first_rules.yml"&lt;/span&gt;
  &lt;span class="c1"&gt;# - "second_rules.yml"&lt;/span&gt;

&lt;span class="c1"&gt;# A scrape configuration containing exactly one endpoint to scrape:&lt;/span&gt;
&lt;span class="c1"&gt;# Here it's Prometheus itself.&lt;/span&gt;
&lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# The job name is added as a label `job=&amp;lt;job_name&amp;gt;` to any timeseries scraped from this config.&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;prometheus'&lt;/span&gt;

    &lt;span class="c1"&gt;# metrics_path defaults to '/metrics'&lt;/span&gt;
    &lt;span class="c1"&gt;# scheme defaults to 'http'.&lt;/span&gt;

    &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;XXX.XXX.XXX.XXX:9100'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  起動スクリプト作成（任意）
&lt;/h3&gt;

&lt;p&gt;/usr/lib/systemd/system/prometheus.service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=Prometheus - Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/src/prometheus/prometheus-server/prometheus \
  --config.file=/usr/local/src/prometheus/prometheus-server/prometheus.yml \

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  起動
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl daemon-reload
自動起動設定
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;prometheus.service
起動
systemctl start prometheus.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;バイナリを直接起動する場合は以下&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;nohup&lt;/span&gt; ./node_exporter &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;grepしてプロセスがスタートしていることを確認できたらOK&lt;/p&gt;

&lt;h3&gt;
  
  
  確認
&lt;/h3&gt;

&lt;p&gt;http://&amp;lt;プロメテウスサーバーのIPアドレス&amp;gt;:9090/graphに接続すると&lt;br&gt;
以下のようなページが表示されると思います。表示されたら、インストール＆初期設定完了&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sn3J0IWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fodbbowah6blc41baqjs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sn3J0IWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fodbbowah6blc41baqjs.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3.Node_exporter導入手順
&lt;/h2&gt;

&lt;p&gt;被監視サーバにssh接続をし以下の手順で導入を行っていきます。&lt;/p&gt;
&lt;h3&gt;
  
  
  port 開放
&lt;/h3&gt;

&lt;p&gt;デフォルトだと9100ポートでlistenするので開放します&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;firewall-cmd &lt;span class="nt"&gt;--add-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9100/tcp &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public &lt;span class="nt"&gt;--permanent&lt;/span&gt;
firewall-cmd &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; 確認 &lt;span class="nt"&gt;--&lt;/span&gt;
firewall-cmd &lt;span class="nt"&gt;--list-ports&lt;/span&gt; &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;public
9100/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Node Exporterのインストール
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;**&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.linux-amd64.tar.gz
&lt;span class="nb"&gt;tar &lt;/span&gt;zxvf node_exporter-&lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;**&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt;.linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  起動スクリプト作成
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter

[Service]
Type=simple
ExecStart=EnvironmentFile=/usr/local/src/prometheus/node_exporter/node_exporter $OPTIONS
Restart=always

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  起動
&lt;/h3&gt;

&lt;p&gt;/usr/lib/systemd/system/prometheus-node-exporter.service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl daemon-reload
&lt;span class="nt"&gt;--&lt;/span&gt; 自動起動設定 &lt;span class="nt"&gt;--&lt;/span&gt;
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;prometheus.service
&lt;span class="nt"&gt;--&lt;/span&gt; 起動 &lt;span class="nt"&gt;--&lt;/span&gt;
systemctl start prometheus.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  確認
&lt;/h3&gt;

&lt;p&gt;http://&amp;lt;監視対象サーバーのIPアドレス&amp;gt;/metricsに接続すると&lt;br&gt;
以下のようなステータスが記載されたページが開くと思います。&lt;/p&gt;

&lt;p&gt;ブラウザでip:9100/metriksへアクセスしてみて以下のようにスクレイプ情報が表示されたら正常に動作しています。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DtyypSeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vask4te33zku6bzp4rlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DtyypSeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vask4te33zku6bzp4rlg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4.Grafana導入手順①(インストール＆初期設定)
&lt;/h2&gt;

&lt;p&gt;Grafanaサーバにssh接続をし以下の手順で導入を行っていきます。&lt;/p&gt;
&lt;h3&gt;
  
  
  インストール
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dl.grafana.com/oss/release/grafana-6.2.5.linux-amd64.tar.gz 
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-zxvf&lt;/span&gt; grafana-6.2.5.linux-amd64.tar.gz 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  起動
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;systemctl start grafana-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;バイナリを直接起動する場合は以下&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;nohup&lt;/span&gt; ./grafana &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;grepしてプロセスがスタートしていることを確認できたらOK&lt;/p&gt;

&lt;h3&gt;
  
  
  アクセス
&lt;/h3&gt;

&lt;p&gt;HTTPで3000番ポートにアクセスとあるので、ブラウザからやってみます。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VGm5UyQM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bxudbdnzrhgxrs01a27n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VGm5UyQM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bxudbdnzrhgxrs01a27n.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;初期ユーザ、パスワードの&lt;strong&gt;admin/admin&lt;/strong&gt;でログインします。&lt;/p&gt;

&lt;h3&gt;
  
  
  パスワードの変更
&lt;/h3&gt;

&lt;p&gt;真っ先にやることは、デフォルトパスワードの変更です。画面左下のアイコンをクリックして、Preferencesを選びます。&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DMKMI7v3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yyl4foaq81dxhjei4sth.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DMKMI7v3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yyl4foaq81dxhjei4sth.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;次の画面で、Chenge Passwordを選択。新旧パスワードを入力して変更します。&lt;/p&gt;

&lt;h3&gt;
  
  
  データソースの登録
&lt;/h3&gt;

&lt;p&gt;次にデータソースを登録していきます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ny2p3jY7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0uut5wt1kflsnidoyazl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ny2p3jY7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0uut5wt1kflsnidoyazl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deta Sourcesをクリックします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cMzUSBm4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/goap4avq4jfir788py2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cMzUSBm4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/goap4avq4jfir788py2c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;名前を入力したらAdd data sourceをクリックしPrometheusを選択&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G9VBaBEW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b444b90bim5tjxx5ofee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G9VBaBEW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b444b90bim5tjxx5ofee.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prometheusを選択する。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DnZ5rOtr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cfdch0qqr1zyg7nbnoin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DnZ5rOtr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cfdch0qqr1zyg7nbnoin.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ここで&lt;a href="http://localhost:9090%E3%81%AEip%E3%81%AFprometheus%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AEip%E3%81%B8%E5%A4%89%E6%9B%B4"&gt;http://localhost:9090のipはprometheusサーバのipへ変更&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R3CP5ZNt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5wkych0bss4i1coypls4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R3CP5ZNt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5wkych0bss4i1coypls4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;「Deta source is working」の表示が出たら設定完了&lt;/p&gt;

&lt;h2&gt;
  
  
  5.Grafana導入手順②(ダッシュボード初期設定)
&lt;/h2&gt;

&lt;p&gt;データ連携が完了したら、次はデータの可視化を行うダッシュボードを作成していきます。ですが、予めダッシュボードの設計をしていない場合はテンプレートの利用がオススメです。&lt;/p&gt;

&lt;p&gt;まず、目的に合わせてGrafanaのテンプレートを選定します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vkcUKfc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/abzybqgjrgklw2fri8o3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vkcUKfc7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/abzybqgjrgklw2fri8o3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;「Grafana Labs」の「Downloads」にマウスオーバし、「Dashboards」をクリックしましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O0eq7Riw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/he3s75nvtp8kldkt8m25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O0eq7Riw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/he3s75nvtp8kldkt8m25.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;すると上記のように、ダッシュボードの候補が表示されます。各ページに飛ぶとDashboard id表示されているのでコピーします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_ubCegga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/putxcczg84ennk4rsf0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_ubCegga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/putxcczg84ennk4rsf0q.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;そして、それをGrafanaのImportにidを入力しLoadするとダッシュボードが作成されます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U9llEwTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l134lgx5l2ecj8hli16h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U9llEwTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l134lgx5l2ecj8hli16h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;作成されたダッシュボードに移動し、データが監視データがトラッキングできていれば、完了です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2bZ-U5OF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sd917lige4yde4emc4jp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2bZ-U5OF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sd917lige4yde4emc4jp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;上記のようなサーバリソース情報が出力されていることが確認できます。&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>[DevSecOps] #2 まず見える化する</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Wed, 05 Aug 2020 19:17:38 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-2-2cc5</link>
      <guid>https://forem.com/mizuki04/devsecops-2-2cc5</guid>
      <description>&lt;h2&gt;
  
  
  1.まず見える化する
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;概要&lt;br&gt;
開発と運用のサイロ化(サイロ化とは、企業のある部門が、他の部門と情報共有や連携などをせずに独自に業務を遂行し、孤立した状態を表す語)を生む原因として、そもそもやりたくない作業（障害復旧とかメンテナンス作業とか）を押し付けあうことが原因となるので、それを少なくしたい。そんな発想が生まれる。見える部分に関しては問題であると認識できるが、見えない部分に関しては言うまでもなく。なので、稼働しているシステムがどのように動作しているかを逐一把握していく必要がある。そうなった時にモニタリング環境を整備する必要がある。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;具体的に満たしたい条件&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;・コストがかからないこと&lt;br&gt;
・応答が早い事&lt;br&gt;
・設定、メンテナンス作業が楽なこと&lt;br&gt;
・機能が豊富なこと&lt;br&gt;
・デザインが美しいこと（これ大事）&lt;/p&gt;

&lt;p&gt;上記を踏まえて技術選定を行った&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y2OGdEXp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q8nxgz0zp7uhv622hfmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y2OGdEXp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q8nxgz0zp7uhv622hfmp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;上記を踏まえるとSoundCloud社がリリースしているPrometheusと言う監視サービスを採択する事に決めた。&lt;/p&gt;

&lt;p&gt;やはり一番のメリットとしては、コストがOSSで無料であることとServiceDiscovery機能によって同一アカウントに紐づくEC2などを自動で検知してくれるスケーラビリティが優れている事として使用を決めた。&lt;/p&gt;




&lt;p&gt;[Prometheusの概要]（以下抜粋）&lt;br&gt;
Prometheus は、サーバのリソース状況やソフトウェアの統計情報といった各種メトリックスを収集して監視を行うモニタリングシステムです。ロギングやトレーシングを行うといった多用途のものではなくメトリックス収集に特化しているモニタリングシステムで、人気が高まりつつあるモニタリングシステムです。&lt;/p&gt;

&lt;p&gt;もともと SoundCloud 社によって開発されたツールで、現在では、Cloud Native Computing Foundation によってメンテナンスされており、クラウドや Kubernetes 環境で利用されるケースが多いのも特徴です。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.sraoss.co.jp/tech-blog/prometheus/prometheus-introduction/"&gt;メリット引用&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;次は構築について記載致します。&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>[DevSecOps] #1 ビジネスを加速する文化的処方箋</title>
      <dc:creator>mizuki04</dc:creator>
      <pubDate>Wed, 05 Aug 2020 18:37:35 +0000</pubDate>
      <link>https://forem.com/mizuki04/devsecops-1-1man</link>
      <guid>https://forem.com/mizuki04/devsecops-1-1man</guid>
      <description>&lt;h2&gt;
  
  
  DevSecOPSとは
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.概念
&lt;/h3&gt;

&lt;p&gt;「development」(開発)と「operations」(運用)、その言葉が明確に分けられ、役割の違いを表しているように。組織内の構造が分かれている事を伴って、必要のない摩擦や作業(組織の大小に関係なく、分かれていることが原因で責任の所在が不明瞭になる事)を生んでいるパターンがしばしば見受けられる。その分断≒細胞壁を破り、ビジネスの方向性によって柔軟に形を変えられる有機体を目指すために、この言葉が生まれたと理解している。また、このような名前付を行う事によって文化となり、ToDoを明確化し、エンジニアリングの価値を実現するスピードを早める考え方であると捉えている。この活動を通して、&lt;/p&gt;

&lt;p&gt;・チーム内の透明性が増し、チーム内に信頼が生まれる。&lt;/p&gt;

&lt;p&gt;・実際にダメージの大きいミスをする前に、それを防ぐ方法をチームメンバに伝えられる。&lt;/p&gt;

&lt;p&gt;・新しい問題の解決に使える時間が増え、より本質的な活動に時間を多く割ける。&lt;/p&gt;

&lt;p&gt;・そもそも、新しいプロダクトを設計するにあたって長期的に発生するであろう技術的な負債を回避できる。&lt;/p&gt;

&lt;p&gt;上記のような満足があるという認識。&lt;/p&gt;

&lt;p&gt;一般的に知られているのは、何か作業を自動化するであったりとか、新しいツールを導入するということが表に出てくることが多いが実際の根本的な課題は、分断されていた状態であったためお互いに理解しあう為のスタンスを持つまでに少しリハビリが必要な事だったりするんじゃないかと思ってる。そしてそのような構造が時間と共に大きくなっていけばいくほど変えづらい物になるので本当に初期に取り組むべき活動だと考えている。&lt;/p&gt;

&lt;h3&gt;
  
  
  2.具体例
&lt;/h3&gt;

&lt;p&gt;実際に上記の文化がない状態だったとしたらどんな現状が起こるのかを書いてみる&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;運用面 : 

&lt;ul&gt;
&lt;li&gt;緊急で入る運用業務に時間が取られ定時過ぎてから「自分の案件」に着手する...&lt;/li&gt;
&lt;li&gt;肥大化したリソースの管理を手動で行うため、運用ミスで重大な毀損の事故を起こす&lt;/li&gt;
&lt;li&gt;secondary繋げ忘れて参照できない問い合わせが来る&lt;/li&gt;
&lt;li&gt;primaryが容量が100%でDBがdown&lt;/li&gt;
&lt;li&gt;slow queryによって、その他のプロセスがつまる&lt;/li&gt;
&lt;li&gt;多数のサーバーの脆弱性対応で一日中工数が奪われる&lt;/li&gt;
&lt;li&gt;そもそもセキュリティ領域の作業などが属人化しているので開発側が分からない&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;開発面 : 

&lt;ul&gt;
&lt;li&gt;複数の案件が同時に走るため、マージ後のテストのし忘れによる事故発生&lt;/li&gt;
&lt;li&gt;密結合なサービスに機能追加したので、全てに影響が出てしまいテストケース増&lt;/li&gt;
&lt;li&gt;新規案件の影響範囲や工数を適切に見積もることができる人材がいない&lt;/li&gt;
&lt;li&gt;UnitTestがなくて手動による確認を行う。結果考慮漏れがあり事故&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;その結果どうなるのか&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;企画が提案する案件は、非常に工数が意識されたその場しのぎの案件が走る&lt;/li&gt;
&lt;li&gt;そもそも既存のソースコードが汚いので。。という妥協&lt;/li&gt;
&lt;li&gt;運用が属人化して、新規参入者が活躍しずらい組織に&lt;/li&gt;
&lt;li&gt;問い合わせやバグなどの発見が非常に困難&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上記の事例をあげるだけでも枚挙に暇がない。&lt;/p&gt;

&lt;h2&gt;
  
  
  3.上記の文化を実現するために
&lt;/h2&gt;

&lt;p&gt;実際にアクションを起こした内容について&lt;strong&gt;[DevSecOps]&lt;/strong&gt;のタグと共に具体的に行ってきた事の詳細を発信しようと思う。&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
    </item>
  </channel>
</rss>
