Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mackerel-ug-kansai-1

 mackerel-ug-kansai-1

フルマネージドホスティングの運用監視に Mackerel を導入した話
at Mackerel UG 関西支部 Meetup #1

ashl for the work

February 12, 2019
Tweet

Other Decks in Business

Transcript

  1. 自己紹介 • Name: 浅原 暁人 • twitter: @HOGEsyndrome • ◦

    2008〜2012 & 2017〜 ◦ インフラエンジニア ▪ フルマネージドサービス基盤 ▪ 開発/構築/運用 ▪ 宣伝
  2. 法人向けフルマネージド ホスティング • 自社基盤メイン ◦ 既存 ISP の回線設備を有効活用 ◦ クラウド基盤

    VMware / 約1000VM ◦ 物理 専用サーバ、共用サーバ / 約500台 ◦ NW 機器 / 約300台 • パブリッククラウド ◦ AWS、GCP、(Azure ほか)
  3. 1. ユーザへの障害通知のタイムラグ • サービス影響を調べてから手動で連絡 ◦ 手動で営業へのメール ▪ 営業から顧客へメール ◦ 手動で障害Webページへの掲載

    • どうしても連絡が遅くなる ◦ 同時に複数の障害が発生した場合 ◦ 夜間休日にリモートで対応 • 社内の複数部署と連携しているシステム
  4. • ZABBIX • Pandora FMS • Cacti (2つ) • GrowthForecast

    • その他自製ツール類 (Shell、Perl、Python ほか) 全て使いこなせる人などいるだろうか(反語 2. 混在している監視システム
  5. 4. 監視サーバの設計上の問題 • 当初予算の制約 • 同一H/Wで監視とログサーバを兼ねていた • Pandora FMS が想定よりリソース食う

    ◦ CPU: Intel Xeon E5-2407 2.20GHz 4コア ◦ Memory: 40GB ◦ それでも、大規模障害でメールが溜まると処理落ち • 基盤と同一NW内に監視サーバを配置
  6. その時、監視は・・・ • ZABBIX ◦ Pandora との住み分けにより、検知せず • Pandora FMS ◦

    監視ステータス:不明 ▪ アラート飛ばず ◦ 結論、リソース不足 • Cacti & GrowthForecast ◦ 自身は元々アラート投げず
  7. プライベート NW 環境に導入しやすい • セキュリティ要件の厳しい顧客のプライベートネッ トワーク環境 ◦ api.mackerelio.com 443 port

    への outbound の許可があればOK ▪ HTTP Proxy or NAT ▪ 監視のために 443 通します、という説明は必要 • 監視サーバからのルーティング、FW許可などが 不要
  8. 導入にあたって • 原則 1顧客 1オーガニゼーション ◦ メール送り先間違い防止 ◦ 70以上のオーガニゼーションを一括管理 •

    Mackerelのメール文面(営業曰く) ◦ 問い合わせ窓口: Mackerel ◦ なに書いてるかわからない ◦ そのままでは顧客・営業に送れない
  9. GCP 上に GCE インスタンスを構築 Python + Flask + FlaskAdmin で作成

    • API Key の管理 • 登録ホスト、アラート等を JSON で取得 • オーガニゼーションごとのホスト数 本当は App Engineを使ってみたかった
  10. Flask Admin + SQLAlchemy class Organizations(db.Model): id = db.Column(db.Integer, primary_key=

    True) name = db.Column(db.String( 50), nullable=False, index=True) apikey = db.Column(db.String( 50), nullable=False, unique=True) verified = db.Column(db.Boolean) private = db.Column(db.Boolean) memo = db.Column(db.String( 200)) admin.add_view(ModelView(Organizations, db.session))
  11. 通知メールのカスタマイズ • Mackerel からの通知メール ◦ From: [email protected] • 営業の要望 ◦

    From の変更 ◦ メール本文のカスタマイズ ◦ 簡単な内容で送って欲しい ◦ service ごとに異なる宛先に送りたい
  12. GCP 上に API 用意 • Flask で Webhook 受け取る •

    JSON から orgName, hostname 等を取得 • 1ホスト 1サービス で運用 • ユーザへのメール送信には SendGrid を利用 user = db.session.query (Notifications). filter( Notifications .orgname == orgname, Notifications .service == service).first()
  13. 補足: GCPのメール送信制限 • ポート 25 を宛先とする送信トラフィック(SMTP) はすべてブロックされます • ポート 465

    または 587 を宛先とするほとんどのト ラフィック(SMTP over SSL)がブロックされます • https://cloud.google.com/compute/docs/netwo rks-and-firewalls
  14. 書き換えたメール • MackerelのアラートIDをケースIDとして通知 • 問い合わせの際にMackerel 上で追える i-TEC マネージドクラウド 障害を検知いたしました。 発生日時   :

    2018-07-26 11:57:04 障害対象サーバ: vmXXXX ケースID   : 3k73ZJscVcW 詳細については下記Webサイトをご確認ください。
  15. CDN転送量監視 • J-Stream とパートナー契約 ◦ APIで転送量取得は可能 ◦ 転送量コミット xx TB

    / 月額 oo 万円 ◦ 容量超過時 xx 円 / GB • Mackerel メトリック監視で転送量を監視 ◦ サービスメトリックに投稿 ◦ 容量超過が発生したらアラート通知 ◦ グラフ共有で関係者に転送量状況を共有
  16. Mackerel登録ホスト数の監視 • default では mackerel-agent.conf は一般ユー ザで読み取り可能 ◦ API Key

    がわかる ◦ chmod 600 mackerel-agent.conf し忘れたり • 他部署に root 権限を渡している ◦ 万が一、誤った操作されたら。。。 • 自前ダッシュボードのAPIが正常動作しているか の確認も兼ねてる