nendのSREエンジニア入門ブログ

nendのSREエンジニア入門ブログ

ユースフル


ユースフル:話し方の極意

今回もコーキさんの話し方の極意をまとめてみました。

話し上手な人は皆フレームワークをつかっていることが多いのが事実です。

話し上手な人がどんなフレームワークを使っているか解説をします。

話し方のコツ①TAPS法

(タップス法)

プレゼンテーションや報告で使われることが多い。 - (TAPS法の語源)

TがTo Be :理想 AがAs Is :現状 PがProbrem :問題 SがSolution :解決 になる。

まず理想がここあります。 現状はここです。 で、理想との差分・ギャップを埋めるためには、どんな問題が存在していて その問題をどう解決していくのか? を体系的に説明するのがTAPS法

  • (例)web運営チームのPLとして、記事リリースの進捗状況を共有する。 進捗状況を共有します。

T: まず9月の記事リリース予定本数は100本でした。

A: そして本日、9月15日で45本のリリースを完了しています。 現状だと、予定より5本遅延しています。

P: 遅延した理由はwebサイトで発生した障害対応に追われ、記事作成に時間が上げられなかったことが理由になります。

S: 対応案としては今後のシステム開発も踏まえ、web開発チームのBさんを短期で一か月アサインすることを考えています。

※あるべきから考えると解決が早くなる。


話し方のコツ②PREP法

PがTo Be :結論 RがAs Is :理由 Eがexample :具体例 PがSolution :解決

  • PREP法のユースケース 日々のコミュニケーションでも使う機会が多い。

  • ※就活や転職の自己PRで使う例

私の強みはXです。 理由はこうです。 具体的にはこういうことをやってきました。 なので私の強みはこうです。

  • ※(例2) youtubeチームからBさんを引っ張って、youtubeチームの運営に影響は出ませんか?

P: 結論出ないと考えています。 R: チーム全体の業務負荷が先月より軽減されてることが上げられます。

E: 具体的には先月と比較して、直近1か月のyoutubeチームの公開予定動画は1動画当たりの編集量が平均xx時間少ないことが上げられます。

P: なのでyoutubeチームの運営に影響は出ないと考えています。


話し方のコツ③SDS法

S: サマリー :概要 D: ディテール :詳細 S: サマリー :再度まとめ

ユースケース

説明が長い時に、詳細を挟んで説明する。

S: 今回の3つフレームワークを知ることが出来ればなぜ上手に説明できるのかわかります。

D: 3つのフレームワークはTAPS法・PREP法・SDS法です。

まとめ

解りやすい伝え方をする・意識をする。


【保存版】無駄を排除!コンサル流「会議の進め方」の極意。司会進行/ファシリテーションのコツも伝授します。

コーキさんの動画が良かったのでテキストでまとめて整理しました。 誰かのお役に立ったらうれしいです。


【保存版】無駄を排除!コンサル流「会議の進め方」の極意。司会進行/ファシリテーションのコツも伝授します。

https://www.youtube.com/watch?v=1RpNqBipSzk


会議の目的

会議の目的は3つあります。「情報共有」「相談」「意思決定」

  • ①情報共有  (出席者に対する一方通行の連絡やお知らせ (具体的にはプロジェクトの体制変更の連絡・開発の進捗状況) )

  • ②相談 出席者同士での双方向のインタラクティブコミュニケーション。

  • ③意思決定 特定の決裁者からの承認を得る

(自分がチームの1メンバーとしてタスク管理ツールを導入したい そういった提案をする場合、マネジメント層の人に承認を得る必要がある。 )


※ webサイトの運営開発を担うwebチームにおける週次定例を例として解説していきます。

会議前のポイント

ファシリテーターとして会議前にやってほしいこと - ※アジェンダを決めること - その日に何を話すか事前に決めておく。

- lv1. アジェンダをただ羅列する。

level1

一番簡潔なパターン。 少人数・身内規模の会議ではこれ位で良い。

- lv2. 目的・担当者・時間まで明確にする。

level2

目的、担当、テーマについて話す時間まで決めておく。

担当:それぞれのアジェンダでメインとなるスピーカーや担当者がいらっしゃるのでそれを明記して 誰がこのアジェンダの担当者なのかを明確にしておく。

時間:上の例だと30分を想定しているので、30分の中でどういった割り振りでアジェンダを進めていくか決めておく。 会議時間がオーバーしそうであれば、教えて別枠設けるなどして調整する。

- lv3. 背景まで明確にする。

level3

会議の参加人数が多かったり(50人以上等)、議題が複雑だったりする場合はレベル3まで細かくしておくのが良い。

会議前に<営業チームのお願い事項>などのテキストを事前共有して認識させる。


アジェンダ設定のポイント

アジェンダは事前に集める。

アジェンダを決めるのはファシリテーターの役目だが、 会議参加メンバーがどんな話したいのかを、 事前収集するのがファシリテーターとして重要。

ファシリテーターだけがアジェンダを決めても必ず漏れが発生する。 「これも話したいんだよね」とかが出てくると会議時間内に収まらないことになる。

なので会議参加者に「事前にアジェンダで話したいことはありませんか?」と聞いて 収集しておいて、そこを整理して優先順位をつけて並べてあげるのが ファシリテーターだけがアジェンダを決める人の役目になる。

②会議資料の事前共有

会議中に資料の読み上げる=解っていることを読み上げるのは時間の無駄

なので事前に、背景をテキストと連携、それでも情報が足りなければ会議資料も連携する。

事前に会議のルールを設計して進めてあげる工夫が大事。

③根回し

(例) タスク管理ツール導入の提案をPMに承認するのがゴールだとする。

懸念点はPMがツールの効果のイメージがつかないであったり、メンバーに馴染んでいくのかみたいなことを 懸念している。

そういった場合は、メンバーに前職でのツール利用者の方がいたら事前に、ネゴシエーションしておくことが大切で 前職での使用経験を元に「このプロジェクトでもそれがうまくハマるということを少しフォローしてもらえませんか?」 と話しておくようなイメージ。

そのように前例が他社でもあり、他メンバーの説得材料もあれば間違いないなと、説得力が上がる。


会議中のポイント

①会議の冒頭でアジェンダを明示する

アジェンダを事前連携しても、大抵読んでくれないので、 最初に見せて全員の共通認識を取るようにする。

②会議のゴールと優先順位を意識する

2を例に挙げると共有・相談・決定 これに加えゴールも決めておく。

共有は一方通行で出来るので問題なし。 相談・決定は議論になる。 「開発メンバーが不足してるため、営業チームで問い合わせ対応してくれるメンバを追加してくれませんか?」

これをゴール議題に落とすと

  1. 営業チームからそもそも人がアサインできるのか?

2.アサインするなら誰をアサインするのか?

というのがゴールのアジェンダになる。

  • 優先順位の整理

一週間後の会議で話してもいいんじゃないの?、他メンバーを巻き込まなくても いいんじゃないの?という議題は勇気をもってその会議では止めることをしておきましょう。

ネクストアクションを決める

ネクストアクションが決められないとその会議の意味がなくなる。 ネクストアクションの例は以下の3つ。

  • 決まったこと→決定事項

  • 決まってないこと→課題

  • 今後のタスク→todo

会議の最後にまとめとして、 「今回決まったことは〇〇ですよね。」 「課題としては〇〇ということが上げられてましたよね。」 「今後の短期的todoとしては誰がいつまでにこれをやるってことですよね」


会議後のポイント

ファシリテーターの役割は会議が終わればおしまいではありません。

会議中に決まったネクストアクションを管理推進していくところまでがファシリテーターの役割と言える。

①議事録展開

ネクストアクション(決定事項・課題・todo)を資料として展開する。

会議に参加できない、メモが取れない人のために中に、テキスト媒体で連携を図って、 共通認識を図っていくのが議事録の目的になります。

※議事録展開は会議の特性によります。 社外や大人数の大事な会議は、資料として議事録展開すべき。 社内のmtgならあまり力を入れない。

②課題/todoのフォローアップ

いつまでもタスク管理ツールに残っていて終わらないタスクがあるのは、管理ができていないから。

期限を決めたタスクが終わっているかはファシリテーターのほうでも管理をし、

もし終わっていないのであれば各担当者に対してリマインドをする。 リマインドをしていくスタンスが必要になる。

これをすれば、課題todoの漏れをなくすことが出来、プロジェクトが効率的かつ円滑に進むようになる。


ユースフル:一流の議事録の取り方/書き方

こんにちわ。 コーキさんの議事録の取り方を自分でメモって整理してみました。 役立ったらうれしいです。

議事録の目的

  • 認識祖語の防止

    • (例)週次の進捗資料の修正を依頼されたと勘違いして更新する資料を間違えた。 (これをしないためには 1.決まった事 2決まってない事. 3.todo の3つをすり合わせておく。
  • 非出席者への情報周知

    • 初見の人が見ても解るような品質で作る。
    • 議事が残されてないと、言った言わないの争いになった時、裁判まで発展するケースがある。 

議事録の作成の3プロセス

    1. 事前準備 議事のスピードと品質を高める。 事前に以下の3つを確認すべし
  • ①目的  (会議が何のために開催されて何をゴールとしているのか事前に確認する)

  • アジェンダ (会議の目的を達成するためにアジェンダは存在している。 各アジェンダの話の論点を事前に確認しておく。 不明な単語は事前に調べておく。)

  • ③出席者 (出席者の誰が発言したかは必ず押さえておくべき。 初対面メンバーが多いと名前把握でも一苦労になるため、事前に名前・役職・役割まで確認しておけると良い。)

メモの工夫

議事録担当はメモを取ることに集中してください。 慣れないうちは会話内容が理解できない、会話が早くてメモが追い付かない問題にぶつかることはがある。

その問題にコーキさんがしていた工夫3つを紹介。

  • ①日本語を省略してメモする (具体的には「経営企画部」を「ケイキ」と略したり「プロジェクトマネジャー」を「PM」と略したり。)

  • ②予測変換機能を使う

(単語登録機能で自分専用にカスタマイズする。 具体的にはよみ「ぐー」を「Google合同会社」などよく使うものを候補に入れる)

  • Excelでメモを取る

( - 人、議事、重要事項の3カラムで構成する。

  • 人名 / 決定事項の入力手間が省ける


議事録の型を知る

スプレッドシート通り議事録を取れば仕事が早くなる。

Yousefulチャンネル_議事録フォーマット(Sample:Web全体会議) - Google スプレッドシート

個人開発ポートフォリオ

未経験でweb系自社開発企業の面接を突破したり、するため 「未経験 web系 ポートフォリオ」等のキーワードで検索して、 ポートフォリオの、クオリティのラインや法則を調査してみた。


勝俣健太さんの見解を要約

Web系自社開発企業さんへの転職に必要なポートフォリオのレベルとは https://www.youtube.com/watch?v=N0yetny4Zco

スクールで作ったポートフォリオが役に立たない理由:

①「初学者のポートフォリオレベルが高くなってるので、授業で作ったアプリでは見劣りしてしまう」 ②スクールの作品しか成果物がないなら、プライベートの学習をしない人と思われてしまう。

Web系自社開発企業さんへの転職にどの程度のレベルのポートフォリオが必要なのか:

・アプリケーションとして十分な機能がある ・UI/UXが整っていて使い勝手が良いこと ・コードの可読性が高い(静的解析ツールも活用できている) ・テストも十分に書いてある ・githubのイシューやプルリクを活用している

という基本的な部分は抑えた上で(初級レベル)

・インフラにAWSを使っている ・CircleCI等のCIツールを活用している ・開発環境と本番環境でDockerが活用されている

も抑えている事。

高評価を得やすいポートフォリオの11個の特徴

https://www.youtube.com/watch?v=WhF0sWUZPWk 0:36 その1:アプリケーションの用途や使用方法が直感的に一発で理解できること 1:17 その2:UI/UXが整っていて使い勝手が良いこと 2:04 その3:レスポンスが良好であること 2:37 その4:リアルなデモデータが登録されていること 3:19 その5:機能数が十分に多いこと 4:01 その6:不具合がないこと 4:27 その7:READMEが整理整頓されていて使用している技術等がざっと把握できること 5:05 その8:コードの可読性が高く、最低限DRY原則が適用されていて、綺麗に整形されていること 5:44 その9:テストが十分に書かれていること 6:10 その10:GitHubのIssueやプルリクを活用していること 6:41 その11:レベル高めの技術キーワード、例えばAWS、Docker、CircleCI等が使われていること


異業種未経験の僕が、3ヶ月で自社開発系Webエンジニアになりました! 活動記録とサービス制作まとめ

https://note.com/kikutantoeic/n/n68ece7bab929

ポートフォリオ

Monolist (楽天APIを使用した商品検索アプリケーション) https://herokumonolist2018.herokuapp.com/

Microposts (Twitterクローン) http://herokumicroposts2018.herokuapp.com/

自分なりの考察:

この方は退職から3か月で、自社開発企業への転職を決めている。

テックアカデミーのlaravelコースを8週間やって 超効率的に転職活動でのポートフォリオを仕上げたそうだ。

あくまでも転職への期限を短期決戦で決めるため、 1か月目はprogateやドットインストールによる基礎の学習。 2か月、3か月目はudemyやテックアカデミーでポートフォリオ作成のサポートを受ける 自社開発系Webエンジニアへ転職を決めるには最も理想的なプランの立て方と言える。 最も重要なのが「明確な目標設定×期限を決める。」これをとことん具体化することではないだろうか。 筆者としても何度か見直して抽象的目標設定に役立てたい。


未経験から4ヶ月でWeb系エンジニアに転職するためにやったこと

https://qiita.com/ryokky59/items/833cb3cf916ec0fd1e19

ポートフォリオ

ツイッターコピー https://morning-thicket-88905.herokuapp.com/talks/top

インスタグラムコピー https://intense-peak-63967.herokuapp.com/pictures

オリジナルアプリComitrace(スケジュール管理アプリ) https://comitrace.herokuapp.com/

自分なりの考察:

スクールについての詳細は書かれていないが、ポートフォリオの重要性を語っている。 最低限の実力+どの分野に行きたいか?をポートフォリオで示すのが良いとのこと。


【実体験をもとに】30歳未経験から独学4ヶ月でバックエンドエンジニアとしてWeb系自社開発企業へ転職するまでのロードマップ https://qiita.com/WATARU_GP01/items/7e534e08f9f583d15775

【使用技術編】未経験からWeb系自社開発企業に転職するためにどのようなポートフォリオを作ったか。

https://qiita.com/WATARU_GP01/items/4d784073d77a6a9da0e3

自分なりの考察:

実践ではherokuデプロイは使えないからmentaを雇ってdocker環境で作成し、awsへデプロイした等、 実環境を想定したポートフォリオを作ったことをアピールすれば技術の証明としては最高点が貰える。


化学系研究者が完全未経験からWeb系自社開発企業に転職するまで https://qiita.com/fuku_tech/items/b8db09720c6d38eb27b9

ポートフォリオ

ブックシェルフ https://frozen-mesa-97749.herokuapp.com/ https://github.com/MasashiFukuzawa/BookshelfApp

ポートフォリオ

スペースフルデイズ https://tranquil-ravine-25204.herokuapp.com/ https://github.com/MasashiFukuzawa/MyCurryApp

1か月目:Progate有料版登録、1ヶ月でHTML/CSS, Javascript, jQuery, Ruby, Railsまで一通り完了、サムライ入会 2か月目:ドットインストール 3か月目:Railsチュートリアル(Progateや技術書で知識を補完しながら実施)+SNSアウトプット 4か月目:プルリクエストやコードレビューなど実務に近い形で実施


【感想】未経験からRailsエンジニアの転職活動を振り返る https://busitora.com/busitora/opinion/how-to-become-engineer


未経験からweb系エンジニアになるための独学履歴~初めてのポートフォリオ作成記録 製作記録編~ https://qiita.com/shitikakei/items/7b0e67af3a2258b53bb8?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items

ポートフォリオ

https://facility-reservation-demo.herokuapp.com/login https://github.com/shitikamiyako/laravel_app


未経験エンジニアがポートフォリオを作る上で必要なこと・やってはいけないこと https://hoshi-log.com/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%8C%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AA%E3%82%AA%E3%82%92%E4%BD%9C%E3%82%8B%E4%B8%8A%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%93/


未経験エンジニアはポートフォリオ無しで転職できます【20代必見】 https://yaba-blog.com/inexperienced-engineer-job-change/


さいごに、

2018年と2020年では採用基準がまったく変わってる(ハードル上がり過ぎている)

テックエキスパート等のスクールで本気で学ぶ人が多いせいか、 web系自社開発企業の採用基準は年々極端に上がっている。




プログラミング 初学者・スクール検討者必見 独学にオススメのページ6選

Let'sプログラミング

https://www.javadrive.jp/

搭載言語:
##Java
・Java入門・サーブレット(Servlet) / JSP入門・Androidプログラミング入門・Swing入門・Eclipse入門
・Javadoc・Apache POIでExcelを操作

##Ruby
・Ruby入門・Ruby on Rails入門

##PHP
・PHP入門・PHP関数リファレンス・PEAR入門・Smartyの使い方

##Perl
Perl入門・Perl関数のリファレンス

##Python
・Python入門

##JavaScript
・JavaScript入門・Ajax入門・jQueryの使い方

##Google関連API
Google Maps JavaScript API入門・Google Maps Static API入門・Google Chart Tools入門

##C言語
C言語入門

恐ろしいほどサンプルが豊富なページ一覧 ここのサンプルを有効に使えばweb系はマスターしたも同然か? ポートフォリオ作りにうまく活用しよう。

paizaラーニング

https://paiza.jp/works/mypage

progate

https://prog-8.com/dashboard

ドットインストール

https://dotinstall.com/

schoo

https://schoo.jp/

udemy

https://www.udemy.com/

※ガチのプロは英語の公式リファレンスや付属のヘルプを翻訳してプログラミングを習得していく。 公式ヘルプを味方につけられるように動き、自走力を身に着けよう。


参考にしたいポートフォリオまとめ


golang未経験者が個人開発でgoを習得してアピールする手段のまとめ

1. golangによるcliアプリ開発

参考:

Go言語未経験のフリーランスエンジニアが案件獲得までにしたこと free-engineer.life

シンタックスハイライトするcatコマンド duコマンドをGo言語で実装 サンプル画像(jpeg, png)を作成するコマンド LINE BOTAPIを2つ


2. goによるweb開発

参考:

Go,Vue,Firebaseを使ってポートフォリオを作成してみた。~参考リンク付き~ qiita.com



techpit:【Go】技術ブログサイトを自作してみよう! 【Go】技術ブログサイトを自作してみよう! | Techpit




おまけ:

alivetodayblog.com

mackarelの概要から実践的な使い方までを解説します。

Mackerelとは?概要・機能・ユースケース解説

Mackerelの機能

ここでは Mackerelの概要について説明します。

  • クラウド環境の監視: Mackerelは、AWSGCP、Azureなどの人気クラウドプロバイダーをサポートし、クラウド環境の監視を手軽で効果的に実行できます。

  • エージェントベースの監視: Mackerelはエージェントベースの監視システムで、サーバーやアプリケーションにエージェントをインストールすることでリアルタイム監視が実現します。

  • ログ収集・監視: アプリケーションログやシステムログの収集、監視、分析が可能なMackerelのログ収集・監視機能があります。

  • サーバーレスアプリケーションの監視: MackerelはAWS LambdaやGoogle Cloud Functionsなどのサーバーレスアーキテクチャ向けのサーバーレスアプリケーション監視に対応しています。

  • ダッシュボード作成: 直感的なUIとダッシュボード機能を備えたMackerelでは、リアルタイムの監視データを簡単に可視化・グラフ化できます。

  • アラート通知: Mackerelのアラート通知機能では、監視データが異常値を示したり、設定した閾値を超えた場合など、条件に応じて通知が行われます。

Mackerelのユースケース

これから、Mackerelのユースケースについてご紹介します。

  • Mackerelの得意分野

Mackerelはシンプルで使いやすいインターフェースが特徴です。Mackerelは使いやすいウェブインターフェースを提供し、ダッシュボードやアラート設定が手軽に行えます。

また、クラウドベースのサービスであるため、導入や管理が簡単です。さらに、サービスが自動的にスケールするので、リソースの調整が不要です。 さらに、豊富なプラグインと統合が用意されており、さまざまなシステムやサービスとの連携が容易になります。

  • Mackerelの苦手分野

インターネット接続が必要であるため、オフライン環境での使用に制約があります。 Mackerelはクラウドサービスに接続するため、インターネット接続が必須です。 また、クラウドベースのサービスであることから、利用料金が発生します。 ただし、Mackerelエージェントの設定ファイルを編集し、メトリクスの送信先をローカルファイルに変更することで、クラウドサービスへの通信を行わず、収集したメトリクスをローカルに保存できます。

ローカルに保存されたメトリクスを解析するためのツールやスクリプトを用意し、 設定した閾値を超えた場合にアラートを出すように構成することも可能です。 これらを踏まえ、Mackerelの利点と制約を理解した上で、 ご自身の状況に合った監視ソフトをお選びください。

AWSとMackerelの準備

AWSアカウント作成

https://aws.amazon.com/jp/register-flow/ まずはじめに、AWSアカウントを作成します。 AWSの公式ウェブサイトにアクセスし、「無料で始める」または「アカウントを作成」をクリックしてください。 次に、必要な情報(氏名、メールアドレス、パスワード、AWSアカウント名)を入力し、 「続行」をクリックします。 その後、連絡先情報やお支払い情報の入力が求められます。 全て入力が完了したら、アカウントが作成されます。

AWS IAMユーザ作成

AWS Identity and Access Management (IAM)を使用して、個別のユーザーを作成します。 これにより、ユーザーごとに適切な権限を与えることができます。

まず、AWS管理コンソールにログインし、「サービス」から「IAM」を選択します。

次に、「ユーザー」をクリックし、「ユーザーを追加」を選択します。

ユーザー名とアクセスタイプ(プログラムによるアクセス、AWSマネジメントコンソールによるアクセス)を指定し、「次のステップ」をクリックします。

ユーザーに適切な権限を与えるために、IAMポリシーをアタッチし、「ユーザーの作成」をクリックして完了します。

AWS EC2インスタンス作成

AWSマネジメントコンソールにログインし、「サービス」から「EC2」を選択します。

次に、「インスタンスの作成」をクリックし、希望のインスタンスタイプを選択します。

インスタンスの詳細設定やストレージ、タグの設定を行います。

「セキュリティグループの設定」で適切なポートを開放します。

最後に、「起動」をクリックし、キーペアを選択または新規作成してインスタンスを起動します。

Mackerelアカウント作成

  • Mackerel公式ウェブサイトへアクセス: まず、Mackerelの公式ウェブサイト(https://mackerel.io/)にアクセスしてください。

  • アカウント登録画面へ進む: ウェブサイトのトップページにある「サインアップ」ボタンをクリックします。

  • メールアドレスを入力: アカウント登録画面で、メールアドレスを入力し、「登録」ボタンをクリックしてください。

これにより、指定されたメールアドレス宛にアカウント登録用のメールが送信されます。

  • アカウント登録用メールの確認: メールアドレス宛に届いたメールを開き、「Mackerelへようこそ!」という件名のメールを探してください。 メール内にある「アカウント登録を完了する」リンクをクリックします。

  • パスワードの設定: 「アカウント登録を完了する」リンクをクリックすると、パスワード設定画面が開きます。適切なパスワードを入力し、もう一度パスワードを確認のために入力して、「登録」ボタンをクリックします。

  • 組織の作成: アカウントが作成されたら、Mackerelのダッシュボードにアクセスし、 「組織を作成」ボタンをクリックします。

組織名を入力し、「作成」ボタンをクリックして組織を作成してください。 これにより、チームメンバーやプロジェクトを管理することができます。 以上でMackerelアカウントの作成が完了します。

アカウントが作成されたら、Mackerelエージェントをインストールしてモニタリングを開始したり、ダッシュボードをカスタマイズしたり、 アラート設定を行ったりすることができます。

Mackerelエージェントのインストールと設定

エージェントのインストール

続いてmackarelエージェントをインストールします。 インストール方法は、対象となるOSによって異なります。以下に、一般的なLinuxディストリビューションでのインストール方法を示します。

Ubuntu/Debianの場合: curl -fsSL https://mackerel.io/file/script/setup-all-apt-v2.sh | CentOS/Amazon Linuxの場合: curl -fsSL https://mackerel.io/file/script/setup-all-yum-v2.sh | sh 詳細なインストール手順や他のOSについては、公式ドキュメント(https://mackerel.io/ja/docs/entry/howto/install-agent)を参照してください。

エージェントの設定

APIキーの設定: Mackerelエージェントが正しく動作するためには、APIキーを設定する必要があります。MackerelダッシュボードでAPIキーを生成し、エージェントの設定ファイルに追加します。

MackerelダッシュボードでAPIキーを生成: Mackerelダッシュボードにログインし、右上のアイコンをクリックして「設定」を選択します。 左側のメニューから「APIキー」をクリックし、画面右上の「APIキーを発行」ボタンをクリックします。 APIキーの用途を説明するメモを入力し、「発行」ボタンをクリックします。生成されたAPIキーをコピーしておきます。

エージェントの設定ファイルにAPIキーを追加: 生成されたAPIキーをMackerelエージェントの設定ファイルに追加します。設定ファイルは、一般的に/etc/mackerel-agent/mackerel-agent.confにあります。 vi エディタでmackarelの設定ファイルを編集します。 vi /etc/mackarel/mackarel.conf 以下のようにapikeyの値を更新してください。 apikey = "your-api-key"

Mackerelエージェントの起動と自動起動の設定: Mackerelエージェントを起動し、OSの起動時に自動的にエージェントが起動するように設定します。

Ubuntu/Debianの場合: sudo systemctl enable mackerel-agent sudo systemctl start mackerel-agent CentOS/Amazon Linuxの場合: sudo chkconfig mackerel-agent on sudo service mackerel-agent start

エージェントの動作確認: Mackerelエージェントが正常に動作しているか確認します。

メトリクス項目について

Mackerelエージェントの初期設定で監視できる項目一覧

Mackerelでは、多くのデフォルトのメトリクスが提供されており、追加の設定なしで監視できます。また、カスタムメトリクスを使用して、独自の監視項目を設定することも可能です。 以下に、主要なデフォルトメトリクスとカスタムメトリクスについて説明します。

デフォルトで監視可能なメトリクス:

以下は、Mackerelがデフォルトで提供する主要なメトリクス項目です。

  • CPU使用率: プロセッサの使用率をパーセンテージで表示します。
  • メモリ使用量: 使用中のメモリ量と空きメモリ量を表示します。
  • ディスク使用量: ディスクの使用量と空き容量を表示します。
  • ネットワーク帯域: 送信および受信データ量を表示します。
  • ロードアベレージ: システムの負荷を示す指標で、一定時間内の実行待ちプロセス数の平均値を表示します。

これらのメトリクスは、Mackerelエージェントが自動的に収集し、ダッシュボードで表示されます。

カスタムメトリクス:

Mackerelでは、カスタムメトリクスを使用して、特定のアプリケーションやサービスの監視を行うことができます。これには、独自のスクリプトプラグインを作成して、Mackerelエージェントに組み込む必要があります。 以下は、カスタムメトリクスで監視できる主要な項目の例です。

  • データベースのクエリ応答時間: データベースへのクエリ処理時間を監視し、パフォーマンスの問題を検出します。

  • キャッシュヒット率: キャッシュシステムの効率を示す指標で、キャッシュヒット数とキャッシュミス数から算出されます。

  • アプリケーションのエラーレート: アプリケーションで発生するエラーの割合を監視し、問題を検出します。 カスタムメトリクスを設定する方法は以下の通りです。 独自の監視スクリプトプラグインを作成します。

Mackerelエージェントの設定ファイル(mackerel-agent.conf)に、作成したスクプトやプラグインを追加し、必要な設定を行います。

Mackerelエージェントを再起動して、新しい設定を適用します。

以上の手順により、カスタムメトリクスがMackerelダッシュボードに表示されるようになります。さらに、カスタムメトリクスに対してアラート条件を設定し、監視の効果を向上させることができます。

まとめると、Mackerelではデフォルトで提供されるメトリクスに加えて、カスタムメトリクスを利用して独自の監視項目を設定できます。これにより、システム全体の状態をより正確に把握し、問題が発生した際に迅速に対応することができます。

CPU使用率を監視し、サーバ負荷をかけてみる

まずはサーバーのCPU使用率を監視し、過負荷の状態を検知します。

設定ファイルにcpu使用率を監視する設定を記入します。 続いてダッシュボードを確認します。 これでcpu使用率を監視できています。

次に、CPUに負荷をかけるコマンドについて説明します。 stressというツールを使用することで、簡単にCPUに負荷をかけることができます。 まず、stressをインストールしましょう。

$ sudo yum install -y stress その後、以下のコマンドを実行してCPUに負荷をかけます。 この例では、4つのCPUワーカースレッドを60秒間実行します。

$ stress --cpu 4 --timeout 60 このコマンドを実行すると、CPU使用率が上昇し、Mackerelのダッシュボードでその変化が確認できます。 監視設定にアラートが設定されている場合、CPU使用率が閾値を超えると、通知が送信されます。

メモリ使用率を監視し、サーバ負荷をかけてみる

続いてはサーバーの物理メモリおよび仮想メモリスワップ)の使用量を監視します。

この例では、256MBのメモリを確保し、それを1つのワーカーが60秒間アクセスします。 bash Copy code $ stress --vm 1 --vm-bytes 256M --timeout 60

ディスク使用量を監視し、サーバ負荷をかけてみる

続いてはサーバーの空き容量や使用率を監視し、容量不足を検知します。

ディスク使用量に負荷をかけるには、大きなファイルを生成してディスク容量を消費させる方法があります。 ddコマンドを使用して、ディスク上に大きなダミーファイルを作成することができます。 以下のコマンドを実行して、1GBのダミーファイルを作成します。 $ dd if=/dev/zero of=dummy_file bs=1M count=1024

このコマンドの説明: if=/dev/zero: 入力ファイルとして/dev/zeroを指定。 これは、無限にゼロバイトが続くデバイスファイルです。 of=dummy_file: 出力ファイルとしてdummy_fileを指定。 このファイルにデータが書き込まれます。 bs=1M: ブロックサイズを1MBに設定。

これにより、一度に1MBのデータが読み込まれます。 count=1024: 1024回繰り返すことで、1MBのブロックを1024回書き込み、合計1GBのファイルが作成されます。 このコマンドを実行すると、ディスク使用量が増加し、Mackerelのダッシュボードでその変化が確認できます。監視設定にアラートが設定されている場合、ディスク使用量が閾値を超えると、通知が送信されます。 負荷テストが終了したら、以下のコマンドでダミーファイルを削除してディスク容量を解放できます。 $ rm dummy_file

Mackerelでアラートを設定する

アラート条件の設定:

Mackerelでは、監視対象のサーバーやサービスに対してアラート条件を設定することができます。 アラート条件は、メトリクスの値が閾値を超えた場合や、監視対象がダウンしている場合など、さまざまな条件を設定できます。

  • アラート条件の設定手順: Mackerelダッシュボードにログインし、左側のメニューから「アラート」をクリックします。 画面右上の「新しい監視ルールを作成」ボタンをクリックします。

監視対象のサーバーやサービスを選択し、アラート条件を設定します。 条件の種類や閾値、期間などを指定できます。 設定内容を確認し、「作成」ボタンをクリックしてアラート条件を保存します。

通知方法の設定:

Mackerelでは、アラートが発生した際に、メールやSlack、Webhookなど様々な方法で通知を受け取ることができます。通知方法はチャネルとして設定し、監視ルールと紐付けます。

  • 通知方法の設定手順: Mackerelダッシュボードにログインし、右上のアイコンをクリックして「設定」を選択します。 左側のメニューから「通知設定」をクリックし、画面右上の「チャネルを作成」ボタンをクリックします。

通知方法を選択し、必要な情報を入力します。例えば、Slack通知の場合、Webhook URLを入力します。 設定内容を確認し、「作成」ボタンをクリックして通知方法を保存します。

通知方法とアラート条件の紐付け:

作成した通知方法をアラート条件に紐付けることで、アラートが発生した際に指定した方法で通知を受け取ることができます。

  • 通知方法とアラート条件の紐付け手順: Mackerelダッシュボードにログインし、左側のメニューから「アラート」をクリックします。 編集したい監視ルールの右側にある「...」をクリックし、「編集」を選択します。 「通知設定」のセクションで、作成した通知チャネルを選択します。

設定内容を確認し、「更新」ボタンをクリックして通知方法とアラート条件の紐付けを保存します。

  • 解除条件の設定: Mackerelでは、アラートが発生した後、特定の条件が満たされた場合にアラートを自動的に解除することができます。解除条件は、メトリクスの値が閾値を下回る場合や、サーバーが復帰した場合などがあります。

解除条件の設定手順:

Mackerelダッシュボードにログインし、左側のメニューから「アラート」をクリックします。 編集したい監視ルールの右側にある「...」をクリックし、「編集」を選択します。

アラート条件の設定セクションにある「解除条件」を選択し、解除条件を設定します。例えば、CPU使用率が閾値を超えた場合にアラートが発生し、CPU使用率が閾値を下回った場合にアラートが自動的に解除されるように設定できます。

設定内容を確認し、「更新」ボタンをクリックして解除条件を保存します。 これらの手順により、アラート条件の設定、通知方法、解除条件をMackerelで設定できます。

グラフの種類とデータ取得方法:

Mackerelでは、さまざまなグラフを作成して、システムのメトリクスを視覚化することができます。グラフには、CPU使用率、メモリ使用量、ディスク使用量、ネットワーク帯域など、システムの状態を示す様々なメトリクスが含まれます。これらのデータは、Mackerelエージェントによって収集され、Mackerelのダッシュボードで表示されます。 データ取得方法: Mackerelダッシュボードにログインします。 左側のメニューから「ホスト」をクリックし、監視対象のホストを選択します。 ホストの詳細ページで、取得したいメトリクスに関連するグラフを見つけます。

表示範囲とスタイル:

Mackerelでは、グラフの表示範囲やスタイルをカスタマイズして、データをわかりやすく表示することができます。 表示範囲の設定手順: ダッシュボードのグラフ上部にある「期間」ドロップダウンメニューをクリックします。 表示したい期間を選択します。例えば、直近1時間、直近24時間、直近1週間などのオプションがあります。 グラフスタイルの設定手順: ダッシュボードのグラフ上部にある「表示」ドロップダウンメニューをクリックします。 グラフのスタイルを選択します。例えば、折れ線グラフ、棒グラフ、エリアグラフなどのオプションがあります。 これらの手順により、Mackerelでグラフの種類とデータ取得方法を設定し、表示範囲とスタイルをカスタマイズできます。適切なグラフを作成することで、システムの状態を把握しやすくなり、問題が発生した際に迅速に対処できるようになります。

Mackerelでカスタム監視を行う方法

監視スクリプトの作成   監視スクリプトの作成 カスタム監視のためには、独自の監視スクリプトを作成する必要があります。スクリプトは、監視対象のシステムやサービスから情報を収集し、Mackerelが解釈できる形式に整形して出力します。監視スクリプトは、PythonRuby、Goなどの言語で書くことができます。以下にPythonでの簡単な例を示します。

import requests import json

response = requests.get('https://example.com/api/v1/metrics') data = response.json()

metrics = []

for item in data['items']: metrics.append({ 'name': 'custom.' + item['name'], 'time': item['timestamp'], 'value': item['value'] }) print(json.dumps(metrics))

上記のスクリプトは、APIからメトリクスを取得し、Mackerelが解釈できる形式に整形して出力します。このスクリプトを実行し、出力結果をMackerelエージェントに渡すことで、カスタム監視を実現します。

結果の解釈とアラート設定

監視スクリプトから取得したメトリクスは、Mackerelダッシュボードで確認できます。ダッシュボードでは、取得したメトリクスをグラフ化し、トレンドや異常値を視覚的に把握することができます。

アラート設定を行うには、Mackerelの「アラート」ページから「新しいアラートルールを作成」ボタンをクリックします。 アラートルールの設定画面で、対象のメトリクス名、アラート条件(例:閾値を超えた場合)、通知方法(例:メール、Slack)などを指定し、アラートルールを保存します。

これにより、カスタム監視で取得したメトリクスに対して、アラートが発生した際に指定した通知方法で通知を受け取ることができます。アラート設定により、システムやサービスの異常状態に迅速に対応することが可能になります。

外部サービスとの連携方法

Mackerel APIを利用することで、外部サービスとMackerelを連携させることができます。 APIを用いて、メトリクスの取得やアラートの管理、サービスやホストの情報を操作することが可能です。

まずは、MackerelのAPIキーを取得しておきましょう。 ダッシュボードの「設定」ページから、「APIキー」タブを選択し、「新しいAPIキーを発行」ボタンをクリックします。 外部サービスと連携するためには、各サービスのAPIとMackerel APIを組み合わせて使用します。 以下に、PythonでMackerel APIを利用してメトリクスを取得する例を示します。

import requests 

api_key = 'your_api_key'

 url = 'https://api.mackerelio.com/api/v0/services/your_service_name/metrics' 
headers = {'X-Api-Key': api_key} 

params = { 
   'name': 'custom.metric.name', 
   'from': 'start_timestamp', 
   'to': 'end_timestamp' 
} 
response = requests.get(url, headers=headers, params=params) print(response.json())

このように、Mackerel APIを利用して外部サービスとの連携を実現できます。

監視データ取得やアラート管理

Mackerel APIを使って、監視データの取得やアラートの管理ができます。 以下に、それぞれの操作例を示します。 監視データ取得: メトリクスを取得するには、上記の例で示したように、GET /api/v0/services/:serviceName/metrics エンドポイントを使用します。from および to パラメータを指定して、取得する期間を設定できます。 アラート管理: アラートを取得するには、GET /api/v0/alerts エンドポイントを使用します。このエンドポイントを使用して、現在のアラート情報を一覧で取得できます。 アラートを解除するには、POST /api/v0/alerts/:alertId/close エンドポイントを使用します。このエンドポイントを使用して、指定したアラートIDのアラートを解除できます。 これらのAPIを活用することで、監視データの取得やアラート管理を柔軟に行うことができます。 外部サービスとの連携により、より効果的な監視体制を構築することができます。 例えば、チャットツール(SlackやMicrosoft Teamsなど)と連携して、アラートが発生した際にチャットルームに通知を送ることができます。このような連携を実現するためには、チャットツールのAPIを利用して、Mackerel APIから取得したアラート情報を送信します。 Slackとの連携を行うPythonのサンプルコードは以下のようになります。

import requests # Mackerel APIからアラート情報を取得 
mackerel_api_key = 'your_mackerel_api_key' 
mackerel_url = 'https://api.mackerelio.com/api/v0/alerts' 
mackerel_headers = {'X-Api-Key': mackerel_api_key} 
mackerel_response = requests.get(mackerel_url, headers=mackerel_headers) 

alerts = mackerel_response.json() 
# Slack APIを使ってアラート情報を送信 
slack_api_key = 'your_slack_api_key' 
slack_url = 'https://slack.com/api/chat.postMessage' 
slack_headers = {'Authorization': f'Bearer {slack_api_key}'} 
slack_channel = '#your_slack_channel' for alert in alerts: message = f"アラート: {alert['message']} (ホスト名: {alert['host']['name']})" 

payload = { 'channel': slack_channel, 'text': message } 
slack_response = requests.post(slack_url, headers=slack_headers, json=payload)

このように、Mackerel APIを活用して監視データを取得し、アラート管理を行うことで、システム管理者が迅速かつ効果的に問題に対処できるようになります。

さらに、様々な外部サービスとの連携により、Mackerelの監視機能を最大限活用することが可能です。

監視データ分析とグラフ活用するための見直し

Mackerelを活用してサービス最適化を行うためには、まず監視データを分析し、適切なグラフを活用することが重要です。

  • (1) メトリクスの選択と分析 最適化に役立つメトリクスを選択し、データを分析します。例えば、CPU使用率、メモリ使用率、ディスク使用率、ネットワーク帯域使用率など、パフォーマンスに関連するメトリクスが重要です。

  • (2) グラフの活用 選択したメトリクスをグラフ化し、傾向や異常値を確認します。Mackerelでは、複数のメトリクスを重ねて表示することができます。これにより、異なるメトリクス間の相関関係を視覚的に把握しやすくなります。

  • (3) パフォーマンス最適化 分析結果をもとに、リソースの割り当てや設定変更など、サービスのパフォーマンスを最適化します。 例えば、CPU使用率が高い場合は、プロセスの最適化やリソースの追加、負荷分散を検討します。

カスタム監視設定 Mackerelでは、標準的なメトリクス以外にも、独自のメトリクスを監視することができます。これにより、サービス最適化に特化した監視を実現することができます。

  • (1) 監視スクリプトの作成 カスタム監視を行うためには、監視対象となる独自メトリクスを収集するスクリプトを作成します。スクリプトは、各種プログラミング言語で記述することができます。

  • (2) Mackerelエージェントへの組み込み 作成した監視スクリプトを、Mackerelエージェントに組み込みます。エージェントの設定ファイル(mackerel-agent.conf)を編集し、監視スクリプトのパスと実行間隔を指定します。

  • (3) アラート設定 カスタムメトリクスに対してアラート条件を設定し、異常値が検出された際に通知を受け取るようにします。

  • (4) カスタムメトリクスの分析と最適化 カスタムメトリクスを分析し、サービスの最適化に活用します。例えば、特定のAPIリクエスト数が増加した場合、キャッシュの導入やレスポンス最適化を検討します。

  • (5) 最適化効果の確認と改善 最適化を実施した後、Mackerelのグラフやアラート履歴を確認して効果を評価します。 効果が不十分な場合は、さらなる最適化や設定変更を行い、サービスの品質を向上させます。 以上の手順で、Mackerelを活用してサービス最適化を行うことができます。 監視データの分析やカスタム監視の設定を通じて、サービスのパフォーマンスや効率を向上させることが可能です。 このプロセスを繰り返すことで、サービス品質の継続的な改善を実現できます。

Mackerelプラグインを利用した監視の強化

Mackerelは柔軟な監視を実現するために、さまざまなプラグインを提供しています。 プラグインを利用することで、Mackerelの機能を拡張し、 カスタマイズした監視を実現することができます。ここでは、Mackerelプラグインを利用した監視の強化方法について説明します。

Mackerelプラグインの種類

Mackerelプラグインには、主に以下の2つの種類があります。

  • メトリックプラグイン: サーバーやアプリケーションのパフォーマンス指標を収集し、Mackerelに送信するプラグインです。

  • チェックプラグイン: サーバーやアプリケーションの状態をチェックし、問題があればアラートを発生させるプラグインです。

プラグインのインストール方法

Mackerelプラグインは、GitHubリポジトリからダウンロードし、対象のサーバーにインストールすることができます。 また、一部のプラグインは、Mackerelエージェントに標準で含まれているため、インストール作業が不要です。 インストール方法は、各プラグインのドキュメントに従って進めてください。

プラグインの設定方法 プラグインをインストールしたら、Mackerelエージェントの設定ファイル(mackerel-agent.conf)に、プラグインの設定を追加します。設定内容は、各プラグインのドキュメントに従って記述してください。

例えば、MySQLのメトリックを収集するプラグイン(mackerel-plugin-mysql)を設定する場合、以下のように設定ファイルに追記します。

[plugin.metrics.mysql] command = "/path/to/mackerel-plugin-mysql -user= -password= -database="

プラグインの活用例

Mackerelプラグインを活用することで、以下のような監視の強化が可能です。

  • データベース監視: MySQLPostgreSQLなどのデータベースのメトリックを収集し、パフォーマンスやリソース使用状況を監視することができます。

  • キュー監視: RabbitMQやAmazon SQSなどのキューサービスのメトリックを収集し、キューの長さやメッセージの処理速度を監視することができます。

  • キャッシュ監視: RedisやMemcachedなどのキャッシュサーバーのメトリックを収集し、キャッシュのヒット率や使用量を監視することができます。

  • ウェブサーバー監視: NginxやApacheなどのウェブサーバーのメトリックを収集し、リクエスト数やレスポンス時間を監視することができます。

カスタムプラグインの作成

Mackerelでは、独自のプラグインを作成することも可能です。カスタムプラグインを作成することで、特定のアプリケーションや環境に対応した監視が実現できます。プラグインの作成方法は、Mackerelのドキュメントに従って進めてください。

プラグインダッシュボードの活用

Mackerelプラグインを利用して収集したメトリックは、ダッシュボードで表示することができます。カスタムダッシュボードを作成して、重要なメトリックを一元的に表示し、監視の効率化を図ることができます。

プラグインとアラートの連携

Mackerelプラグインで収集したメトリックに対して、アラート設定を行うことができます。閾値を設定して、問題が発生した際に通知を受け取ることができます。

プラグインのメンテナンスとアップデート

Mackerelプラグインは、定期的にメンテナンスやアップデートが行われることがあります。

最新のプラグインを利用することで、新しい機能やパフォーマンスの改善が得られます。 プラグインのアップデート方法は、各プラグインのドキュメントに従って進めてください。

MackerelとKubernetesの連携手順

Kubernetesk8s)は、コンテナオーケストレーションプラットフォームであり、アプリケーションのスケーリングやローリングアップデート、セルフヒーリングなどの機能を提供しています。

Mackerelは、サーバー監視およびアプリケーションパフォーマンスモニタリングツールであり、Kubernetesクラスターと連携することで、リソース使用状況やアプリケーションのパフォーマンスを効果的に監視できます。 以下では、MackerelとKubernetesの連携手順について説明します。

Mackerelエージェントのインストールと設定

まず、Kubernetesクラスター内のすべてのノードにMackerelエージェントをインストールする必要があります。 Mackerelエージェントは、ノードのリソース使用状況やカスタムメトリックを収集し、Mackerelサーバーに送信します。

Mackerelエージェントは、公式のDockerイメージが提供されているため、KubernetesのDaemonSetリソースを使用してインストールできます。 まず、以下のようなマニフェストファイル(mackerel-agent.yaml)を作成します。

apiVersion: apps/v1 
kind: DaemonSet 
metadata:
 name: mackerel-agent spec:
 selector:
 matchLabels:
 app: mackerel-agent
 template:
 metadata:
 labels:
 app: mackerel-agent
 spec:
 containers:
 - name: mackerel-agent
 image: mackerel/mackerel-agent:latest env: - name: MACKEREL_APIKEY valueFrom: secretKeyRef: name: mackerel-agent-apikey key: apikey volumeMounts: - name: mackerel-agent-conf mountPath: /etc/mackerel-agent - name: host-root mountPath: /host readOnly: true volumes: - name: mackerel-agent-conf configMap: name: mackerel-agent-conf - name: host-root hostPath: path: /

このマニフェストファイルでは、MackerelエージェントのAPIキーをKubernetesのSecretリソースから取得して環境変数に設定しています。

次に、MackerelのAPIキーを含むSecretリソースと、Mackerelエージェントの設定ファイルを提供するConfigMapリソースを作成します。

apiVersion: v1 
kind: Secret 
metadata:
 name: mackerel-agent-apikey 
type: Opaque 
data:
 apikey: <your_base64_encoded_api_key>
—
apiVersion: v1
kind: ConfigMap
metadata:
name: mackerel-agent-conf
data:
mackerel-agent.conf: |
pidfile = "/var/run/mackerel-agent.pid"
root = "/host"
[host_status]
on_start = "working"
on_stop = "poweroff"

この設定ファイルでは、MackerelエージェントのプロセスIDファイルのパス、ホストのルートディレクトリへのマウントポイント、およびホストステータスの変更設定を定義しています。

マニフェストの適用

作成したマニフェストファイルを使用して、MackerelエージェントのDaemonSet、Secret、およびConfigMapリソースをKubernetesクラスターに適用します。 次のコマンドを実行してマニフェストを適用します。

kubectl apply -f mackerel-agent.yaml

MackerelとKubernetesの連携確認

Mackerelエージェントが正常にインストールされ、KubernetesクラスターのノードがMackerelに登録されていることを確認します。 Mackerelのダッシュボードでホスト一覧を表示し、Kubernetesクラスターのノードがリストされていることを確認できます。

Mackerelによる監視の設定

Mackerelで監視対象のメトリックやアラートの閾値を設定して、監視を始めます。Mackerelでは、サービスやロールを使用して、監視対象のホストをグループ化し、メトリックの収集やアラートの設定を効率的に管理できます。

Mackerelプラグインの利用

Kubernetesクラスターの監視をさらに強化するために、Mackerelプラグインを利用できます。 例えば、mackerel-plugin-kubernetesを使用して、KubernetesAPIサーバーから取得できるメトリックを収集し、Mackerelに送信できます。 プラグインを利用するためには、Mackerelエージェントのコンテナに追加の設定を行い、マニフェストファイルを更新する必要があります。

MackerelとAWS CloudFormationの連携手順

AWS CloudFormationは、インフラストラクチャーをコードとして管理し、AWSリソースを自動的にプロビジョニングするためのサービスです。 Mackerelは、サーバー監視およびアプリケーションパフォーマンスモニタリングツールであり、AWS CloudFormationと連携することで、インフラストラクチャーの監視を効果的に行うことができます。以下では、MackerelとAWS CloudFormationの連携手順について説明します。

Mackerelエージェントのインストールと設定

まず、AWS CloudFormationを使用して、Mackerelエージェントをインストールするためのテンプレートを作成する必要があります。 このテンプレートでは、MackerelエージェントがインストールされるEC2インスタンスの設定や、Mackerelエージェントの設定ファイルが含まれます。以下に、Mackerelエージェントをインストールするための簡単なAWS CloudFormationテンプレートの例を示します。

Resources:
  MackerelAgentInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: <AMI_ID>
      InstanceType: t2.micro
      KeyName: <Your_Key_Name>
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          echo "deb [arch=amd64] http://mackerel.io/deb/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/mackerel.list
          apt-get -y install apt-transport-https
          apt-get -y update
          apt-get -y install mackerel-agent
          echo "apikey: ${MackerelApiKey}" > /etc/mackerel-agent/mackerel-agent.conf
          systemctl enable mackerel-agent
          systemctl start mackerel-agent

このテンプレートでは、ユーザーデータを使用して、EC2インスタンスの起動時にMackerelエージェントをインストールするスクリプトが実行されます。 また、MackerelのAPIキーを環境変数から取得して、Mackerelエージェントの設定ファイルに設定しています。

AWS CloudFormationスタックの作成

作成したテンプレートを使用して、AWS CloudFormationスタックを作成します。 次のAWS CLIコマンドを実行して、スタックを作成できます。

aws cloudformation create-stack --stack-name MackerelAgentStack --template-body file://mackerel-agent.yaml --parameters ParameterKey=MackerelApiKey,ParameterValue=<Your_Mackerel_Api_Key>

このコマンドでは、テンプレートファイルのパスと、MackerelのAPIキーをパラメータとして指定しています。

MackerelとAWS CloudFormationの連携確認

AWS CloudFormationスタックが正常に作成され、MackerelエージェントがインストールされたEC2インスタンスが起動されたことを確認します。

Mackerelのダッシュボードでホスト一覧を表示し、新しく作成されたEC2インスタンスがリストされていることを確認できます。

Mackerelによる監視の設定

Mackerelで監視対象のメトリックやアラートの閾値を設定して、監視を始めます。Mackerelでは、サービスやロールを使用して、監視対象のホストをグループ化し、メトリックの収集やアラートの設定を効率的に管理できます。

Mackerelプラグインの利用

AWS CloudFormationでプロビジョニングされたインフラストラクチャの監視をさらに強化するために、Mackerelプラグインを利用できます。 例えば、mackerel-plugin-aws-ec2を使用して、EC2インスタンスのCPU使用率やネットワーク帯域使用率などのメトリックを収集し、Mackerelに送信できます。 プラグインを利用するためには、Mackerelエージェントの設定ファイルに追加の設定を行い、AWS CloudFormationテンプレートを更新する必要があります。

まとめ

MackerelとAWS CloudFormationを連携させることで、インフラストラクチャーの監視を効果的に行うことができます。 AWS CloudFormationを使用してMackerelエージェントをインストールし、メトリックの収集やアラートの設定を行うことで、インフラストラクチャーの監視を効率的に行えます。 また、Mackerelプラグインを利用することで、AWSリソースの詳細なメトリックを収集し、監視の精度をさらに向上させることができます。

Mackerelを使ったサーバーレスアプリケーション監視方法

サーバーレスアプリケーションは、従来のサーバーベースのアプリケーションとは異なり、インフラストラクチャの管理が不要で、コードの実行に必要なリソースが自動的に割り当てられるため、開発者はアプリケーションの実装に集中できます。 ここでは、Mackerelを使ったサーバーレスアプリケーション監視方法について説明します。

Mackerelのセットアップと設定

最初に、Mackerelのアカウントを作成し、APIキーを取得してください。次に、Mackerelのエージェントをインストールし、設定ファイル(mackerel-agent.conf)を編集して、APIキーを設定します。また、監視対象のサービスやロールを設定ファイルに記述します。

サーバーレスアプリケーションの環境構築

AWS LambdaやGoogle Cloud Functionsなどのサーバーレスプラットフォームを使用して、アプリケーションの環境を構築します。これらのプラットフォームでは、関数を作成し、トリガーを設定して、イベントに応じて関数が自動的に実行されるようにします。

Mackerelとサーバーレスプラットフォームの統合

サーバーレスプラットフォームとMackerelを統合するために、Mackerelのライブラリを関数にインポートし、関数内でMackerelのAPIを使用して監視データを送信します。例えば、AWS Lambdaの場合、Mackerelのnpmパッケージをインストールし、関数コードでMackerelクライアントをインスタンス化して、カスタムメトリックを送信することができます。

サーバーレスアプリケーションの監視項目

サーバーレスアプリケーションの監視には、以下のような項目が考えられます。

  • 関数の実行回数: アプリケーションの利用状況を把握するために、関数がどれだけ実行されているかを監視します。

  • 関数の実行時間: 関数のパフォーマンスを評価するために、各関数の実行時間を監視します。

  • エラー率: アプリケーションの安定性を確認するために、関数のエラー発生率を監視します。

  • メモリ使用量: 関数のリソース使用状況を把握するために、メモリ使用量を監視します。

ダッシュボードとアラート設定

Mackerelでは、ダッシュボードをカスタマイズして、サーバーレスアプリケーションの監視データを一元的に表示できます。 また、アラート設定を行うことで、閾値を超えた際に通知を受け取ることができます。

ログ監視

サーバーレスアプリケーションのログを分析することで、エラーやパフォーマンスの問題を特定し、解決策を見つけることができます。Mackerelでは、ログ監視機能を利用して、特定のキーワードやパターンを検出し、アラートを設定することができます。

分散トレーシング

サーバーレスアプリケーションは、マイクロサービスアーキテクチャを採用することが多いため、分散トレーシングが重要です。 Mackerelでは、分散トレーシング機能を利用して、リクエストがシステムを通過する際の遅延やエラーを追跡し、問題を特定できます。

アプリケーションの最適化 Mackerelを使用して監視データを収集し、分析することで、アプリケーションの最適化が可能です。例えば、関数の実行時間が長い場合は、コードの最適化やリソース割り当ての調整を行うことで、パフォーマンスを向上させることができます。

AZURE クラウド構築・開発の習得に役立つudemy・テキスト一覧

最近、AZUREに触る機会が増えてきました。 なのでここでazure学習に役立つで動画教材・テキストをまとめてみます。


津郷 晶也さんの講座


Azure で作る Webアプリケーション 実践講座

聞いたことはあるがまだ触ったことがない人も、本講座でAzure上に実業務を想定したWebアプリケーション(Node.js + MySQL)の構築を実際に行うことで、
Azure上にWebアプリケーションを構築する方法が身に付きます。

https://www.udemy.com/course/webapplication-on-azure/


Azure OpenAI Service + Bot Service で作る Teams ChatBot

Azure OpenAI Service の ChatGPT, Bot Service, App Service を組み合わせ、GitHub Copilot を使った爆速 Teams 向け ChatGPT チャットボット 開発!
https://www.udemy.com/course/aoai-chatbot/



Makoto Okadaさんの講座


作りながら覚えるMicrosoft Azure入門講座(PaaS編)

AWSGCP と並び人気の高いMicrosoft Azure。この講座では代表的な PaaS のサービスを組み合わせた可用性の高いWebシステムの構築方法を丁寧に解説します。

https://www.udemy.com/course/microsoft-azure-paas-part/


作りながら覚えるMicrosoft Azure入門講座(IaaS編)

世界最大規模のクラウドサービスであるMicrosoft Azureの世界に触れてみよう!Azureは AWSGCP と並び世界3大クラウドの中のひとつです。
仮想マシンを使ってサーバを構築する上での基本的なテクニックを丁寧に解説します。

https://www.udemy.com/course/microsoft-azure-iaas-part/



ウチダさんの講座


MicrosoftAzurePaaS(1):AppServiceと関数アプリの仕組みからトラブルシューティングまでを実践

【勉強時間を短縮できる】Microsoft公式ドキュメントを読まずにAzureの仕組みを理解できます!
また、手を動かしながらシステム構築・アプリケーション開発も習得できます。【説明資料もプレゼント】

https://www.udemy.com/course/microsoftazure-paas-appservice/


MicrosoftAzurePaaS(2):アプリの異常検知からストレージとネットワーク構成まで

【Azure活用方法がわかる】公式ドキュメントを読んでも理解しづらい仕組み・Azure動作が理解できます!Azure活用方法を実践と共に紹介します。

https://www.udemy.com/course/microsoftazurepaas2/



【AZ-900合格講座】Azureを基礎からしっかりと学びたい方へ(講義・演習・問題の3部構成で理解を深めよう!)

講義・演習・問題の3部構成でAzureの概要を学べるAZ-900試験を突破するための講座です。リージョン・仮想マシン・ストレージ・Monitorなど、AZ-900試験を合格するための情報を数多く盛り込んでいます。

https://www.udemy.com/course/azure-az900-learn/


azure vmでweb serverを構築・公開する所までの手順を解説!

前提条件の確認

Azureサブスクリプションの有効性 Azure CLIやAzure Portalへのアクセス Azure Virtual Machineの作成

リソースグループの作成 VMのサイズとOSの選択 管理者アカウントの設定 ネットワーク設定 (VNet, Subnet, IPアドレス) VMへの接続

Windowsの場合: RDPを使用 Linuxの場合: SSHを使用 Webサーバーのインストール

Linuxの場合: Apache, Nginxなどのインストール Windowsの場合: IISの設定 Webサーバーの設定

ドキュメントルートの設定 仮のHTMLページを配置 ファイアウォールとネットワークの設定

NSG (Network Security Group) でのポート80 (または443) の開放 VM内部のファイアウォール設定の確認・変更 Webページへのアクセステスト

公開されたIPアドレスをブラウザで確認 追加のセキュリティ設定 (オプション)

SSL/TLS証明書の配置 HTTPSの設定 Webアプリケーションファイアウォールの導入 保守と監視

Azure MonitorやLog Analyticsのセットアップ 必要に応じてバックアップの設定

embulk入門(EC2インスタンス環境からredshiftによるDWH構築)


0. 前書き

機械学習や AI 技術の急速な発展に伴い、データの取り扱いがますます重要な役割を担っています。 データは、機械学習モデルの訓練や評価、ビジネスインテリジェンスにおける意思決定の根拠となるため、その質や整理が極めて重要です。 ここで、Embulk のようなデータ変換ツール(RTL:Record Transformation Language)が大きな役割を果たしています。

Embulk は、データ変換とデータ移行を効率化するためのオープンソースソフトウェアです。

異なるデータソースからデータを抽出し、変換して目的のデータストアにロードするプロセスを簡単かつ迅速に実行できます。

Embulk は、Java で書かれており、プラグインアーキテクチャを採用しているため、さまざまなデータソースやデータストアに対応できます。

これにより、開発者はデータの変換や移行の際に柔軟性を持ち、効率的な作業が可能になります。

データ変換ツールの重要性は、以下の点で特に顕著です。

    1. データ品質の向上 データ変換ツールを利用することで、データの品質を一貫して向上させることができます。 データの変換プロセス中に、欠損値の補完や外れ値の検出、データ型の統一など、さまざまなデータクレンジング処理を行うことができます。
    1. データ連携の強化 異なるシステムやアプリケーション間でデータを連携させる際に、データ形式の違いやプロトコルの違いが障壁となることがあります。 Embulk のようなデータ変換ツールを使用することで、データ連携の障壁を取り除き、システム間のデータ連携をスムーズに行うことができます。
    1. イムリーなデータアクセス データ変換ツールを活用することで、異なるデータソースから迅速にデータを抽出・変換し、必要なデータストアにアクセスすることができます。 これにより、適切なタイミングでデータを利用し、ビジネスインテリジェンスや意思決定に役立てることができます。
    1. コスト削減 手動でのデータ変換やデータ移行は、作業時間がかかり、人的コストも高くなります。 データ変換ツールを使用することで、作業時間を短縮し、人的コストを削減することができます。 また、データの品質向上により、誤った意思決定によるコストも低減されます。
    1. 拡張性と柔軟性 Embulk のようなデータ変換ツールは、プラグインアーキテクチャを採用しているため、新しいデータソースやデータストアが追加された場合でも容易に対応することができます。 これにより、企業がデータソースやデータストアを変更・追加する際の柔軟性が向上します。
    1. 標準化と再利用性 データ変換ツールを使用することで、データ変換プロセスを標準化し、再利用可能なコンポーネントやテンプレートを作成することができます。 これにより、新たなプロジェクトやタスクに対しても、効率的にデータ変換作業を行うことができます。
    1. データセキュリティの向上 データ変換ツールは、データ移行や変換の際に、データの暗号化やアクセス制御などのセキュリティ対策を提供します。 これにより、データの機密性や完全性を保護し、セキュリティリスクを軽減することができます。
  • まとめ Embulk のようなデータ変換ツールは、データ品質の向上、データ連携の強化、 タイムリーなデータアクセス、コスト削減、拡張性と柔軟性の向上、標準化と再利用性の促進、 データセキュリティの向上など、多くのメリットを提供します。 これらの利点により、企業はデータ変換やデータ移行のプロセスを効率化し、ビジネスインテリジェンスや意思決定の精度を向上させることができます。


1. Embulkの概要

Embulkは、エンタープライズレベルのデータ統合を実現するためのオープンソースのデータ統合ツールです。

異なるデータソースからデータを抽出し、変換し、異なるデータストアへとロードする、いわゆるETL(Extract, Transform, Load)プロセスを効率的かつ柔軟に行うことができます。

Javaで実装されており、プラグインアーキテクチャを採用しているため、多様なデータソースやデータストアに対応し、独自のデータ変換や処理を容易に追加することができます。

1-1. Embulkの特徴

Embulkは、以下のような特徴を持っています。

  • プラグインアーキテクチャ: 多様なデータソースやデータストアに対応できるだけでなく、独自のデータ処理や変換処理を容易に追加できます。これにより、Embulkは様々なビジネスシナリオに適応しやすいデータ統合ツールとなっています。

  • スケーラビリティ: Embulkは、マルチスレッドおよびマルチプロセスによる並行処理をサポートしています。これにより、大量のデータを効率的に処理でき、高速なデータ統合を実現します。

  • 設定ファイルによる管理: Embulkは、YAML形式の設定ファイルによってデータ統合の設定を管理します。これにより、データ統合のプロセスを明確化し、再利用可能で保守性の高いデータ統合パイプラインを構築することができます。

  • プレビュー機能: Embulkは、データ統合プロセスを実行する前に、その結果をプレビューすることができます。これにより、データ統合のパイプラインが期待通りに動作するかどうかを確認し、問題があれば修正することが容易になります。

  • クロスプラットフォーム: Javaで実装されているため、WindowsmacOSLinuxなどの異なるプラットフォームで動作します。

これにより、環境に依存せず、幅広いシステムでデータ統合を実現することができます。


2. AWSのEC2インスタンスによるembulk実行環境の準備

  • AWSアカウント作成

https://aws.amazon.com/jp/register-flow/ まずはじめに、AWSアカウントを作成します。 AWSの公式ウェブサイトにアクセスし、「無料で始める」または「アカウントを作成」をクリックしてください。 次に、必要な情報(氏名、メールアドレス、パスワード、AWSアカウント名)を入力し、 「続行」をクリックします。 その後、連絡先情報やお支払い情報の入力が求められます。 全て入力が完了したら、アカウントが作成されます。

  • AWS IAMユーザ作成

AWS Identity and Access Management (IAM)を使用して、個別のユーザーを作成します。 これにより、ユーザーごとに適切な権限を与えることができます。

まず、AWS管理コンソールにログインし、「サービス」から「IAM」を選択します。

次に、「ユーザー」をクリックし、「ユーザーを追加」を選択します。

ユーザー名とアクセスタイプ(プログラムによるアクセス、AWSマネジメントコンソールによるアクセス)を指定し、「次のステップ」をクリックします。

ユーザーに適切な権限を与えるために、IAMポリシーをアタッチし、「ユーザーの作成」をクリックして完了します。


3. AWS EC2インスタンス作成

AWSマネジメントコンソールにログインし、「サービス」から「EC2」を選択します。

次に、「インスタンスの作成」をクリックし、希望のインスタンスタイプを選択します。

インスタンスの詳細設定やストレージ、タグの設定を行います。

「セキュリティグループの設定」で適切なポートを開放します。

最後に、「起動」をクリックし、キーペアを選択または新規作成してインスタンスを起動します。

3-1. embulk動作環境の前提知識

  • Java EmbulkはJavaで実装されているため、Java 8以降のバージョンが必要です。Javaがインストールされていない場合は、OracleのウェブサイトまたはOpenJDKプロジェクトからJavaをダウンロードし、インストールしてください。

  • Embulkのダウンロード Embulkの公式ウェブサイト (https://www.embulk.org/) からEmbulkのバイナリファイルをダウンロードします。 ダウンロードしたファイルを適切なディレクトリに移動し、実行可能な状態にします。

  • 環境変数の設定: システムの環境変数にEmbulkのバイナリファイルのパスを追加します。これにより、コマンドラインからEmbulkを実行できるようになります。

  • Embulkの基本的な使用方法

Embulkを使用してデータ統合を行うには、以下の手順に従います。

  • 設定ファイルの作成: YAML形式の設定ファイルを作成し、データの抽出元、変換処理、ロード先などの設定を記述します。必要に応じて、プラグインをインストールして設定ファイルに追加します。

  • データ統合の実行: コマンドラインから embulk run <設定ファイル> コマンドを実行して、データ統合プロセスを開始します。データの抽出、変換、ロードが順次行われます。

  • プレビューとデバッグ: 設定ファイルに問題がある場合や、データ統合の結果を確認したい場合は、 embulk preview <設定ファイル> コマンドを使用して、データ統合の結果をプレビューします。 問題があれば設定ファイルを修正し、再度プレビューや実行を行います。

  • Embulkプラグインの活用

Embulkのプラグインアーキテクチャを活用することで、データ統合プロセスをカスタマイズし、独自のビジネス要件に対応できます。 Embulkプラグインは主に以下の4つの種類があります。

  • Inputプラグイン: データの抽出元となるデータソースに接続し、データを読み込むプラグインです。例えば、CSVファイル、データベース、APIなどのデータソースからデータを抽出するためのプラグインが提供されています。

  • Outputプラグイン: データのロード先となるデータストアに接続し、データを書き込むプラグインです。例えば、データベース、クラウドストレージ、データウェアハウスなどのデータストアにデータをロードするためのプラグインが提供されています。

  • Filterプラグイン: データの変換や加工を行うプラグインです。例えば、データの型変換、値の置換、列の削除・追加などの処理を実行するためのプラグインが提供されています。

  • Executorプラグイン: Embulkの動作を制御するプラグインです。例えば、並行処理の設定やリトライロジック、タスクの分割方法などをカスタマイズするためのプラグインが提供されています。

プラグインのインストールは、 embulk gem install <プラグイン名> コマンドを使用して行います。 インストールが完了したら、設定ファイルにプラグインの設定を追加することで、データ統合プロセスに組み込むことができます。

3-2. amazon linux2によるembulk環境構築デモ(バイナリファイル使用)

  • 前提条件 このデモでは、Amazon Linux 2の環境がすでにセットアップされていることを前提としています。以下の手順は、Amazon Linux 2のインスタンスSSH接続できる状態から始めます。

環境の準備 まず、Amazon Linux 2のインスタンスSSH接続します。以下のコマンドを使用して、インスタンスに接続できます。

$ ssh -i <your_private_key.pem> ec2-user@<your_instance_public_ip>

インスタンスに接続したら、最新のパッケージをインストールします。以下のコマンドを実行して、パッケージをアップデートします。

$ sudo yum update -y

Javaのインストール

EmbulkはJavaで実装されているため、Java 8以降のバージョンが必要です。以下の手順でJavaをインストールします。

まず、Javaのインストールを行います。以下のコマンドを実行して、OpenJDK 8をインストールします。

$ sudo yum install -y java-8-openjdk-devel

Javaのインストールが完了したら、バージョンを確認します。以下のコマンドを実行して、Javaのバージョンが表示されることを確認します。

$ java -version

Embulkのインストール Embulkのバイナリファイルをダウンロードします。以下のコマンドを実行して、Embulkのバイナリファイルをダウンロードし、実行可能な状態にします。

$ curl -o embulk --create-dirs -L "https://dl.embulk.org/embulk-latest.jar"
$ chmod +x embulk

以下のコマンドを実行して、Embulkを /usr/local/bin に移動します。

$ sudo mv embulk /usr/local/bin/

Embulkのバージョンを確認します。以下のコマンドを実行して、Embulkのバージョンが表示されることを確認します。

$ embulk --version

サンプルデータの準備

このデモでは、CSV形式のサンプルデータを使用します。以下のコマンドを実行して、サンプルデータを作成します。

$ echo "id,name,age" > sample.csv
$ echo "1,Alice,30" >> sample.csv
$ echo "2,Bob,28" >> sample.csv
$ echo "3,Charlie,22" >> sample.csv
$ echo "4,David,40" >> sample.csv

これにより、以下の内容の sample.csv ファイルが作成されます。

id,name,age
1,Alice,30
2,Bob,28
3,Charlie,22
4,David,40

設定ファイルの作成

  1. Embulkの設定ファイルを作成します。以下のコマンドを実行して、YAML形式の設定ファイル try.yml を作成します。

$ touch try.yml

  1. 作成した try.yml ファイルを編集し、以下の内容を追加します。
in:
  type: file
  path_prefix: /path/to/your/sample.csv
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: LF
    type: csv
    delimiter: ','
    quote: '"'
    escape: ''
    null_string: ''
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: id, type: long}
    - {name: name, type: string}
    - {name: age, type: long}

out:
  type: stdout

この設定ファイルでは、CSVファイルからデータを読み込み、標準出力にデータを表示するように設定しています。path_prefix の値を、先ほど作成した sample.csv ファイルのパスに置き換えてください。


3-3. Embulkの実行

以下のコマンドを実行して、Embulkを実行し、データ統合プロセスを開始します。

$ embulk run try.yml

実行が完了すると、標準出力にデータが表示されます。以下のような出力が表示されることを確認します。

{"id":1,"name":"Alice","age":30}
{"id":2,"name":"Bob","age":28}
{"id":3,"name":"Charlie","age":22}
{"id":4,"name":"David","age":40}

デバッグとプレビュー

設定ファイルに問題がある場合や、データ統合の結果を確認したい場合は、以下のコマンドを使用してデータ統合の結果をプレビューします。

$ embulk preview try.yml

プレビューの結果が表示されます。以下のような出力が表示されることを確認します。

+---------+----------+-----+
| id:long | name     | age |
+---------+----------+-----+
|       1 | Alice    |  30 |
|       2 | Bob      |  28 |
|       3 | Charlie  |  22 |
|       4 | David    |  40 |


----
## 3-4. 設定ファイルの作成

Embulkでは、YAML形式の設定ファイルを使用してデータ統合の設定を行います。このデモでは、CSVファイルを読み込み、標準出力に表示する簡単な設定ファイルを作成します。

1. 以下の内容で `try.yml` ファイルを作成します。

in: type: file path_prefix: ./sample.csv parser: charset: UTF-8 newline: LF type: csv delimiter: ',' quote: '"' escape: '' null_string: 'NULL' trim_if_not_quoted: false skip_header_lines: 1 allow_extra_columns: false allow_optional_columns: false stop_on_invalid_record: true columns: - {name: id, type: long} - {name: name, type: string} - {name: age, type: long}

out: type: stdout

この設定ファイルでは、入力として sample.csv ファイルを指定し、CSVファイルのパース設定を記述しています。出力として標準出力を指定しています。


----
## 3-5. Embulkの実行と動作確認

以下のコマンドを実行して、Embulkを実行し、データ統合プロセスを開始します。

$ embulk run try.yml
Embulkが正常に実行されると、標準出力に以下のような結果が表示されます。

id,name,age 1,Alice,30 2,Bob,28 3,Charlie,22 4,David,40

これで、Amazon Linux 2でEmbulkをインストールし、動作確認ができました。
今回のデモでは、CSVファイルを読み込み、
標準出力に表示する簡単なデータ統合を行いましたが、Embulkのプラグインを活用することで、さまざまなデータソースからのデータ抽出やデータストアへのデータロード、データの変換・加工を行うことができます。



docker-composeでetl対象DB/BI/embulk環境をデプロイする

----
## 3-6. Dockerファイルの用意

まず、以下のようなdocker-compose.yamlファイルを作成します。

version: '3'

services: db: image: mysql:5.7 environment: MYSQL_DATABASE: sample MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: root_password volumes: - ./mysql-data:/var/lib/mysql ports: - "3306:3306"

metabase: image: metabase/metabase ports: - "3000:3000" environment: MB_DB_TYPE: mysql MB_DB_DBNAME: sample MB_DB_PORT: 3306 MB_DB_USER: user MB_DB_PASS: password MB_DB_HOST: db

embulk: image: embulk/embulk volumes: - ./embulk:/embulk - ./mysql-data:/var/lib/mysql command: ["embulk"] tty: true

このファイルでは、3つのサービスを定義しています。


* db:MySQLデータベースサーバー

* metabase:MetabaseのWebアプリケーションサーバー

* embulk:Embulkのコンテナ

dbサービスでは、MySQLのイメージを使用し、MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD、MYSQL_ROOT_PASSWORDの環境変数を設定しています。また、ポート3306をホストとコンテナの間でマッピングし、データを永続化するためにvolumesを設定しています。

metabaseサービスでは、Metabaseのイメージを使用し、MB_DB_TYPE、MB_DB_DBNAME、MB_DB_PORT、MB_DB_USER、MB_DB_PASS、MB_DB_HOSTの環境変数を設定しています。
また、ポート3000をホストとコンテナの間でマッピングします。

embulkサービスでは、Embulkのイメージを使用し、volumesを設定しています。
また、commandにはembulkコマンドを指定しています。


----
## 3-7. Docker Composeを実行する

Docker Composeを実行する前に、プロジェクトのディレクトリに移動してください。

$ cd myproject

次に、以下のコマンドを実行して、Docker Composeを起動します。

$ docker-compose up -d

これにより、MySQL、Metabase、Embulkの3つのコンテナが作成され、起動されます。

サンプルデータの準備

まず、CSV形式のサンプルデータを作成します。以下のような内容のsample.csvファイルを作成し、./embulkディレクトリに保存します。

id,name,age,address 1,Alice,25,Tokyo 2,Bob,30,Osaka 3,Charlie,35,Kyoto

----
## 3-8. Embulkの設定ファイルを作成する

Embulkを使用して、CSVファイルからMySQLデータベースにデータをロードします。Embulkの設定ファイルを作成し、必要なパラメータを設定します。

以下のコマンドを使用して、Embulkの設定ファイルを作成します。

$ embulk guess ./embulk/sample.csv -o ./embulk/config.yml

guessコマンドを使用することで、CSVファイルのスキーマを自動的に推測し、設定ファイルを作成できます。作成されたconfig.ymlファイルを編集して、以下のように設定します。

in: type: file path_prefix: ./embulk/sample.csv parser: type: csv delimiter: ',' quote: '"' null_string: 'NULL' escape: '"' columns: - {name: id, type: long} - {name: name, type: string} - {name: age, type: long} - {name: address, type: string}

out: type: jdbc driver_path: /usr/share/java/mysql-connector-java.jar url: jdbc:mysql://db/sample user: user password: password table: users mode: insert

この設定では、inプラグインでCSVファイルを読み込み、outプラグインでMySQLデータベースにデータを書き込みます。また、必要なパラメータ(ドライバーのパス、接続先のURL、ユーザー名、パスワード、テーブル名など)が設定されています。


----
## 3-9. Embulkのプラグインをインストールする

Embulkのプラグインをインストールする必要があります。以下のコマンドを使用して、必要なプラグインをインストールします。

$ embulk gem install embulk-input-file $ embulk gem install embulk-output-jdbc $ embulk gem install embulk-output-mysql

これにより、inプラグインとoutプラグインがインストールされます。


Embulkのドライランを実行する

Embulkを使用して、MySQLデータベースにデータをロードする前に、ドライランを実行して、問題がないか確認します。

以下のコマンドを使用して、Embulkのドライランを実行します。

$ embulk run ./embulk/config.yml -c ./embulk/

これにより、設定ファイルに従って、CSVファイルが解析され、MySQLデータベースに書き込まれる予定のデータが表示されます。

EmbulkでMySQLデータベースにデータをロードする
ドライランが成功したら、実際にMySQLデータベースにデータをロードします。

以下のコマンドを使用して、Embulkを実行します。

$ embulk run ./embulk/config.yml -c ./embulk/

これにより、CSVファイルからMySQLデータベースにデータがロードされます。


----
## 3-10. Metabaseでデータを可視化する

Metabaseを使用して、MySQLデータベースにロードされたデータを可視化します。

Metabaseにアクセスするには、Webブラウザで以下urlにアクセスします。
http://localhost:3000

Metabaseのダッシュボードが表示されます。

最初に、データベースを追加する必要があります。左側のサイドバーで「Add data」をクリックします。
その後、MySQLデータベースを選択し、必要な情報を入力します。以下の情報を入力します。

Database name:sample Host:localhost Port:3306 Database username:user Database password:password

これらの情報を入力したら、「Test Connection」をクリックして接続を確認します。
接続が成功したら、「Save」をクリックしてデータベースを追加します。

次に、クエリを作成します。
左側のサイドバーで「Ask a question」をクリックし、適切なデータベースを選択します。その後、テーブルを選択し、必要なグラフや表を作成します。

以上の手順を実行することで、CSVファイルからMySQLデータベースにデータをロードし、Metabaseで可視化することができます。



s3→ec2(mysql)で特定カラムを暗号化して転送(embulk-filter-encrypt-column プラグイン)

ここではダミーのcsvをs3にアップロードし、一部のカラムに暗号化を施しmysqlに転送する工程を解説します

----
## 3-11. ダミーデータの作成とs3アップロード

以下のサイトでダミーデータを作成します。
https://testdata.userlocal.jp/
行数は何でもいいですが確認しやすいよう50行以内にしましょう。

(例)

"氏名","氏名(ひらがな)","年齢","生年月日","性別","血液型","メールアドレス","電話番号","携帯電話番号","郵便番号","住所","会社名","クレジットカード","有効期限","マイナンバー" "阿部 望","あべ のぞみ",49,"1973年06月10日","男","AB","abe_610@example.net","0565-10-3122","070-6963-2372","478-1873","愛知県豊田市若宮町1-1-3","株式会社パートナー","3543265770563937","01/26","576149735983"

上のような生成されたファイルをs3バケットにアップロードします。

----
## 3-12. AWS S3にアクセスキーとシークレットキーを設定する

最初に、AWS S3にアクセスするために必要なアクセスキーとシークレットキーを設定します。AWS S3のWebコンソールにログインし、[セキュリティ認証情報]をクリックして、アクセスキーとシークレットキーを取得します。

Embulkの設定ファイルを作成する

次に、Embulkの設定ファイルを作成します。以下のような設定を記述することで、AWS S3にアップロードされたCSVファイルを読み込み、指定したデータベースに書き込みます。

in: type: s3 bucket: your-bucket access_key_id: YOUR_ACCESS_KEY_ID secret_access_key: YOUR_SECRET_ACCESS_KEY path_prefix: /path/to/csv/file.csv parser: type: csv delimiter: ',' quote: '"' null_string: 'NULL' escape: '"' columns: columns: - {name: name, type: string} - {name: name_hiragana, type: string} - {name: age, type: long} - {name: birthdate, type: string} - {name: gender, type: string} - {name: blood_type, type: string} - {name: email, type: string} - {name: phone_number, type: string} - {name: mobile_phone_number, type: string} - {name: postal_code, type: string} - {name: address, type: string} - {name: company_name, type: string} - {name: credit_card_number, type: string} - {name: expiration_date, type: string} - {name: my_number, type: string}

filters: - type: encrypt_column columns: - name - name_hiragana - age - birthdate - gender - blood_type - email - phone_number - mobile_phone_number - postal_code - address - company_name - credit_card_number - expiration_date - my_number key_provider: type: random secret_key: your_secret_key key_columns: - id out: type: jdbc driver_path: /usr/share/java/mysql-connector-java.jar url: jdbc:mysql://db/sample user: user password: password table: users mode: insert

設定ファイルでは、inプラグインでS3からCSVファイルを読み込み、outプラグインでMySQLデータベースにデータを書き込みます。
また、filtersで個人情報を含むemailカラムを暗号化するように設定されています。


----
## 3-13. Embulkのプラグインをインストールする

Embulkのプラグインをインストールする必要があります。
以下のコマンドを使用して、必要なプラグインをインストールします。

$ embulk gem install embulk-input-s3 $ embulk gem install embulk-output-jdbc $ embulk gem install embulk-filter-encrypt-column

これにより、inプラグインとoutプラグイン、encrypt_columnプラグインがインストールされます。


Embulkのドライランを実行する

以下のコマンドを使用して、Embulkのドライランを実行します。

$ embulk run /path/to/config.yml

ドライランが成功したら、実際にMySQLデータベースにデータをロードします。

$ embulk run /path/to/config.yml

これにより、AWS S3にアップロードされたCSVファイルからデータが読み込まれ、指定したMySQLデータベースに書き込まれます。
また、emailカラムに含まれる個人情報が暗号化されます。

以上の手順を実行することで、AWS S3にアップロードされたCSVファイルからEmbulkを使用してMySQLデータベースにデータをロードし、個人情報を暗号化することができます。


----
# 4. mysqlのデータをredshiftに出力して可視化する

## 4-1.Embulkの設定ファイルを作成する

まずは、Embulkの設定ファイルを作成します。
MySQLからデータを抽出してRedshiftに挿入するため、以下のような設定ファイルを作成します。

in: type: mysql host: localhost user: user password: password database: sample table: users columns: columns: - {name: name, type: string} - {name: name_hiragana, type: string} - {name: age, type: long} - {name: birthdate, type: string} - {name: gender, type: string} - {name: blood_type, type: string} - {name: email, type: string} - {name: phone_number, type: string} - {name: mobile_phone_number, type: string} - {name: postal_code, type: string} - {name: address, type: string} - {name: company_name, type: string} - {name: credit_card_number, type: string} - {name: expiration_date, type: string} - {name: my_number, type: string}

filters: - type: decrypt_column columns: - name - name_hiragana - age - birthdate - gender - blood_type - email - phone_number - mobile_phone_number - postal_code - address - company_name - credit_card_number - expiration_date - my_number key_provider: type: random secret_key: your_secret_key key_columns: - id

out: type: redshift host: your-redshift-endpoint user: your-redshift-username password: your-redshift-password database: your-redshift-database schema: your-redshift-schema table: users mode: insert

設定ファイルでは、inプラグインでMySQLからデータを抽出し、outプラグインでRedshiftにデータを書き込みます。
また、filtersで個人情報を含むemailカラムを復号化するように設定されています。



## 4-2.Embulkのプラグインをインストールする

以下のコマンドを使用して、必要なプラグインをインストールします。

$ embulk gem install embulk-input-mysql $ embulk gem install embulk-output-redshift $ embulk gem install embulk-filter-decrypt-column

これにより、inプラグインとoutプラグイン、decrypt_columnプラグインがインストールされます。


Embulkのドライランを実行する

以下のコマンドを使用して、Embulkのドライランを実行します。

$ embulk run /path/to/config.yml

ドライランが成功したら、実際にRedshiftにデータを書き込みます。

$ embulk run /path/to/config.yml

これにより、MySQLデータベースからデータが抽出され、指定したRedshiftに書き込まれます。また、emailカラムに含まれる個人情報が復号化されます。

以上の手順を実行することで、Embulkを使用してMySQLからデータを抽出してRedshiftにデータを書き込み、個人情報を復号化することができます。