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
990
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
620
Other Decks in Programming
See All in Programming
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
1
240
Hono + Inertia + React で LP を構築した話
oukayuka
2
150
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
280
源内ハンズオン概要編
hideg
0
210
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
110
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.5k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
430
メールのエイリアス機能を履き違えない
isshinfunada
0
250
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
220
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
280
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
480
Git: the NoSQL Database
bkeepers
PRO
432
67k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Rails Girls Zürich Keynote
gr2m
96
14k
Building the Perfect Custom Keyboard
takai
2
850
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
210
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
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