Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Monitoring Containerized Elixir
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
さっちゃん
September 07, 2019
Programming
1.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Monitoring Containerized Elixir
#ElixirConfJP #CastleConf
さっちゃん
September 07, 2019
More Decks by さっちゃん
See All by さっちゃん
敎へない敎師と、考へる機械
ne_sachirou
0
32
火星曆
ne_sachirou
0
59
みんなのオブザーバビリティプラットフォームを作ってるんだがパフォーマンスがやばい #mackerelio #srenext
ne_sachirou
0
1.8k
作ってよかったgraceful shutdownライブラリ #kyotogo
ne_sachirou
0
1.5k
path 依存型って何?
ne_sachirou
0
880
野生の onbording と onbording 設計 #kyototechtalk
ne_sachirou
0
770
メトリックはいかにして見え續ける樣になったか #devio2022
ne_sachirou
0
150
名實一致
ne_sachirou
0
790
まかれるあなとみあ ―Mackerel のしくみを理解する 30 分― @ Hatena Engineer Seminar #16
ne_sachirou
0
3.4k
Other Decks in Programming
See All in Programming
AWSに止められる覚悟してますか?
morizo_1984
2
510
Simple Storage Service(S3) is not simple
iwatsukayura
0
210
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
320
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
160
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
630
パーソナライズPodcastを作った話
repunit11
0
120
Are APIs Still Relevant in the AI Era?
soyuka
0
430
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
160
自サークルのIdPからログアウトできるようになるまで
taiseiue
0
110
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
920
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Practical Orchestrator
shlominoach
192
12k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Skip the Path - Find Your Career Trail
mkilby
1
240
Transcript
Monitoring Containerized Elixir
.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆) @ Mackerel.io / Hatena.ne.jp
Imagine, you have a great Elixir app.
Imagine, you have a great Elixir app. And will be
working it on Docker
Imagine, you have a great Elixir app. And will be
working it on Docker on Kubernetes.
Why container, Docker? Container is an abstract layer over infrastructure.
It runs everywhere. It easy to create, share, transfer & run.
Why Kubernetes? K8s is a common language. K8s can run
every types of applications.
Elixir on Containers https://speakerdeck.com/ne_sachirou/elixir-on- containers s/:distillery/Mix.Release/
When you've deployed the app on K8s. How to monitor
it?
Why Monitoring? Is your app works well? Know how your
app works. What caused when your app is broken. Keep your app observable.
Liveness check Is your app is living or not?
K8s has liveness probe. --- apiVersion: apps/v1 kind: Deployment spec:
template: spec: containers: - name: app livenessProbe: httpGet: path: /ops/heartbeat port: 4000
How to check your app is live or not?
KomachiHeartbeat https://hex.pm/packages/komachi_heartbeat Vital monitoring Elixir Web application.
KomachiHeartbeat The name is originate from a great Rubygems :
https://rubygems.org/gems/komachi_heartbeat
Add KomachiHeartbeat. defmodule Example.Router do use Plug.Router plug(:match) plug(:dispatch) forward("/ops",
to: KomachiHeartbeat) end defmodule ExampleWeb.Router do use ExampleWeb, :router forward("/ops", KomachiHeartbeat) end
Check it. % curl http://localhost/ops/heartbeat heartbeat:ok Also available from Zabbix,
ALB health check or Mackerel's "External Http monitor (外形監視)".
Error collection Listening canary song.
Sentry https://sentry.io/ Collect & sort errors. Show the error environments:
stacktrace, HTTP params, app host, release ver… Assign & resolve issue. Integrate with Sass: Slack, GitHub…
Add https://hex.pm/packages/sentry in your app. defmodule Example.Application do use Application
def start(_type, _args) do Logger.add_backend(Sentry.LoggerBackend) … end defmodule Example.Router do use Sentry.Plug … end & add many metadata, by yourself (・﹏・)
Metrics monitoring Know the app behaviour & detect anomary.
Prometheus + Grafana + deadtrickster/beam-dashboards Beautiful. But to keep Prometheus
servers have many toils.
Mackerel https://mackerel.io
Add mackerel-container-agent as a sidecar. --- apiVersion: apps/v1 kind: Deployment
spec: template: spec: containers: - name: app … - name: mackerel-container-agent image: mackerel/mackerel-container-agent:latest imagePullPolicy: Always resources: limits: {memory: 128Mi} env: - {name: MACKEREL_CONTAINER_PLATFORM, value: kubernetes} - name: MACKEREL_KUBERNETES_KUBELET_HOST valueFrom: fieldRef: fieldPath: status.hostIP - name: MACKEREL_KUBERNETES_NAMESPACE valueFrom: fieldRef: {fieldPath: metadata.namespace} - name: MACKEREL_KUBERNETES_POD_NAME valueFrom: fieldRef: {fieldPath: metadata.name} - {name: MACKEREL_ROLES, value: example:app} envFrom: - secretRef: {name: mackerel}
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization … secretGenerator: - name: mackerel type:
Opaque files: [MACKEREL_APIKEY=secret/MACKEREL_APIKEY]
None
OK. I see container's metrics. How about BEAM metrics?
KomachiHeartbeat + mackerel- plugin-json https://hex.pm/packages/komachi_heartbeat Vital monitoring Elixir Web application.
https://github.com/mackerelio/mackerel-plugin-json Json custom metrics plugin for mackerel.io agent.
KomachiHeartbeat has /stats endpoint that returns app's stats in JSON.
mackerel-plugin-json posts any data gotten from JSON API as Mackerel custome metrics.
We have KomachiHeartbeat.BeamVital . https://github.com/ne- sachirou/ex_komachi_heartbeat/pull/29 (Sorry for under development.)
Add KomachiHeartbeat.BeamVital . defmodule TeijiBot.Router do use Plug.Router plug(:match) plug(:dispatch)
forward( "/ops", to: KomachiHeartbeat, init_opts: [vitals: [KomachiHeartbeat.BeamVital]] ) end
Configure mackerel-plugin-json. --- apiVersion: apps/v1 kind: Deployment spec: template: spec:
volumes: - name: mackerel-agent-config configMap: name: mackerel-agent-config containers: - name: app … - name: mackerel-container-agent image: mackerel/mackerel-container-agent:plugins … env: - {name: MACKEREL_AGENT_CONFIG, value: /etc/mackerel/mackerel.yaml} … volumeMounts: - name: mackerel-agent-config mountPath: /etc/mackerel readOnly: true
--- apiVersion: v1 kind: ConfigMap metadata: name: mackerel-agent-config data: mackerel.yaml:
| plugin: metrics: json: command: | mackerel-plugin-json \ -url="http://localhost:4000/ops/stats" \ -prefix='beam'
None
Current metrics : atom_count memory_ets_tables memory_system_bytes_total atom, binary, code, ets,
other port_count process_count (More, under development.)