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
970
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
590
Other Decks in Programming
See All in Programming
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.2k
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
240
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
250
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.1k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
6.4k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
250
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
570
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
780
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
330
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
240
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Navigating Weather and Climate Data
rabernat
0
220
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
The Invisible Side of Design
smashingmag
302
52k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
GraphQLとの向き合い方2022年版
quramy
50
15k
Designing for Timeless Needs
cassininazir
1
260
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
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