Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Terraformを使ったNewRelic監視設定の展開
Search
mshiono
June 15, 2023
Programming
980
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Terraformを使ったNewRelic監視設定の展開
mshiono
June 15, 2023
More Decks by mshiono
See All by mshiono
New Relicを使ったPING監視の特徴
mshiono
0
610
Other Decks in Programming
See All in Programming
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.5k
5分で問診!Composer セキュリティ健康診断
codmoninc
0
810
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
180
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
210
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
270
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
520
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
260
AIが無かった頃の素敵な出会いの話
codmoninc
1
360
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
240
メールのエイリアス機能を履き違えない
isshinfunada
0
210
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Side Projects
sachag
455
43k
Typedesign – Prime Four
hannesfritz
42
3.1k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
How to build a perfect <img>
jonoalderson
1
5.8k
Everyday Curiosity
cassininazir
0
270
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Statistics for Hackers
jakevdp
799
230k
Embracing the Ebb and Flow
colly
88
5.1k
Making Projects Easy
brettharned
120
6.7k
Transcript
terraformを使ったNew Relic 監視設定の展開 塩野 正人 2023年06月14日
目次 1. 自己紹介・会社紹介 2. 自動設定ツールの導入背景 3. 導入時の課題 4. どのように設定ファイルを作ったか?
自己紹介・会社紹介
4 自己紹介 名前:塩野 正人(しおの まさと) 所属:株式会社サーバーワークス マネージドサービス部MS2課 趣味 読書(ラノベ、小説)、音楽、たまにTwitterとか・・ 好きなもの
Youtubeなどでかわいいネコの動画を見る 牛乳が9割以上のコーヒーらしき飲み物 SNS @shioccii
5 会社紹介 株式会社サーバーワークス 従業員数:231名(2023年2月末日時点) 事業内容 AWS専業のクラウドインテグレーター 主な事業: クラウドインテグレーション AWS環境への導入支援 請求代⾏サービス(リセール)
技術サポート、運用自動化、損害保険など システム運用・監視 ( MSP / SRE ) AWS環境のシステムの運用監視(24時間/365日) ※所属部署では右表のようなサービスを提供
自動設定ツールの導入背景
7 どのように設定をしているか 弊社MSP事業を展開している関係上、 複数のお客様毎に環境が異なるため、 似たような構成の設定を施す必要があります 画面で ぽちぽち・・
8 同じような設定を複数の案件で展開するため、 数が増えれば増えるほど、ケアレスミスが発生しやすい 同じ設定で 疲れた どのように設定をしているか
自動ツールの検討
10 自動設定ツールの特徴 New Relicで使える自動設定の選択肢は3つある New Relic NerdGraph API New Relic
REST API Terraform
11 自動設定ツールの特徴ーGraph API New Relic NerdGraph API JSON形式のコードが長く、アラート毎に変更が必要 コード管理が大変そう・・・
12 自動設定ツールの特徴ーGraph API New Relic REST API そもそも非推奨・・・
13 自動設定ツールの特徴ーGraph API Terraform IaCだし、ノウハウためれば他でも流用できるし もう、これでいいんじゃね?
導入時の課題
Terraformの仕様
16 Terraformの仕様 Terraformの定義ファイルの主要なものは以下の3つ main.tf コード本体を入れるファイル variables.tf 変数を入れるファイル ※無くても動くが用意することが推奨 outputs.tf サブ関数で得た結果をメイン関数に返す場合に使う
※ファイル分割してモジュール化する場合に使う ※無くても動くが用意することが推奨
17 Terraformの仕様 Terraformの設定の流れを整理 terraform init 構成内容を初期化して必要なモジュール(provider関連など)の取得 terraform plan コード実⾏した際の変更点をチェック。dry-runのようなもの terraform
apply コードを実⾏して設定を反映
18 Terraformの仕様 Terraformの設定の流れを整理 そして・・・ 無事設定が完了すると、設定情報がtfstateファイルに保存され、 次回の設定変更の際に参照される
自動ツールの機能とあるべき姿
20 Terraformというツールの課題 Terraformの場合、変数は使えるものの監視設定のキモとな るPolicyやConditionを設定する時に、それぞれ値を埋め込 んでおく必要がある
21 案件毎に設定ファイルを個別に作成した場合、 terraformのコード作成以外にtfstateファイルの管理も必要 Terraformというツールの課題 案件A.tfstate 案件A.tf 案件B.tfstate 案件B.tf 案件C.tfstate 案件C.tf
22 案件毎にTerraformのコード改修が必要になるため、 人によるスキルレベルの差は大きな課題になる Terraformというツールの課題 Terraform? なにそれ おいしいの? Terraform? 楽勝っすよ!
23 設定の理想と現実 Terraformというツールの課題 理想 現実 • 設定ファイルはひとつ • 全ての環境で均一した設定をする •
案件毎に設定ファイルを管理 • 設定ファイルの編集難易度は高い
どのように設定ファイルを作ったか?
Terraformの機能で見落としはないのか?
26 Terraformの機能の確認 tfstateのリセットコマンドが存在することが判明 引用元 https://developer.hashicorp.com/terraform/cli/commands/state/rm
27 Terraformの機能の確認 terraformで設定する場合に、下記のフローの実現が可能 terraform init(初期化) terraform plan(内容確認) terraform apply(設定反映) terraform
state rm(設定初期化) たくさん設定する場 合でも、別の設定を ここから実施できる
Terraformのコードを実装
29 Terraformの設定ファイル 設定の流れを下記に変更 terraform init 構成内容を初期化して必要なモジュール(provider関連など)の取得 terraform plan コード実⾏した際の変更点をチェック。dry-runのようなもの terraform
apply コードを実⾏して設定を反映 terraform state rm tfstateをリセットすることで、設定ファイルを使いまわす 追加した手順
30 Terraformの設定ファイル 設定ファイルの構成 ▪New Relic設定ツール ┣ create_condition ※ここからコンディション単体を作成 ┣ main.tf
: ┣ create_policy ※この階層よりポリシー&コンディションの作成をおこなう ┣ main.tf : ┗ module ※この中に設定の定義ファイルが保存されている ┣ ec2 ┣ main.tf ┣ output.tf ┣ variable.tf :
31 Terraformの設定ファイル Conditionフォルダの中身 ▪変数ファイル(variables.tf) variable "newrelic_api_key" { type = string
default = "" } : variable "config_os_common" { type = string default = "n" } : ▪実⾏ファイル(main.tf) module "nr_condition" { source = "../module/condition/create_alert_condition" # ----- コンディション設定(Listで渡す) condition_list = concat( var.config_os_common == "y" ? module.ec2_param. windows_common : [] , : Terraformには IF関数がないため、 3点リーダーで設定用のリストを作 成 concatでパラメータが ”y” 指定されているものを追加 するのがポイント コマンド実⾏時の引 数を定義
32 Terraformの設定ファイル moduleフォルダの中身ーcondition設定 ▪変数ファイル(variables.tf) variable "newrelic_api_key" {} variable "newrelic _account_id"
{} variable "ec2_hostname" {} variable "ec2_port_number" {} variable "ec2_process_name" {} variable "ec2_service_name" {} variable "ec2_logfile_name" {} : 設定用リスト作成用のtfファイ ルと値を共有するための変数 を定義 ▪実⾏ファイル(main.tf) resource "newrelic_nrql_alert_condition" "create_alert_condition" { # コンディション(リスト変数)の値をループして、各 コンディションの設定をおこなう for_each = { for i in var. condition_list : i.condition_name => i } enabled = each.value.condition_enable : リストとして登録した設定用パラ メータを使用してそれぞれに必要 な設定をする
33 Terraformの設定ファイル moduleフォルダの中身ーec2定義ファイル ▪変数ファイル(variables.tf) locals { windows_common = [ {
nrql = "SELECT average(`host.cpuUserPercent`) FROM Metric” condition_enable = “true" , condition_operator = "above", : 各conditionに設定してい る詳細の設定内容はすべ てここで定義している ▪実⾏ファイル(output.tf) # ----- for ec2 configration output "windows_common" { value = local. windows_common } output "windows_service" { value = local. windows_ service } output "windows_port" { value = local.windows_ port } : 設定用リストに呼び出すた めの変数を定義
34 Terraformの設定ファイル 設定時のパラメータ指定方法 ▪New Relic設定ツール ┣ create_condition ※ここからコンディション単体を作成 ┣ main.tf
: C:¥newrelic-config > cd create_condition C:¥newrelic-config¥create_condition > terraform init : C:¥newrelic-config¥create_condition > terraform plan -var “newrelic_api_key =NRAKxxx” -var “ec2_hostname =hogehost” -var “newrelic _account_id=1234567” -var “config_os_common=y” 引数で指定することで、nr_condition 関数内で定 義している変数に対して設定が必要なリストとし て設定を追加する 設定コマンドで標準的に 必要なパラメータ
None