SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Goのロギング周りの考
察
株式会社ホワイトプラス システム開発Gマネジャー 大和屋貴仁
Go Conference 2017 Autumn
OSSで採用されているロギング
大和屋貴仁
株式会社ホワイトプラス
システム開発G マネジャー
Microsoft MVP for Azure(2011-2018
Qiita : @t_Yamatoya
http://sqlazure.jp/r
富士フィルムイメージングシステムズと
共同開発したRFID検証。
宅配ネットクリーニングのリネット
会員数20万人突破!
Golang、RFIDなど新しい技術や物を活用したサービス改善に興味のあるエンジニア募集!!
今日のお話
標準logパッケージの特徴
OSSのロギング事情
利用しているロギングライブラリ
Golangのロギング事情について調べてみまし
た
アプリを書くときのロギング実装の参考になれば幸い
SRE サイトリライアビリティエンジニアリング
――Googleの信頼性を支えるエンジニアリングチーム
Prometheusは、特にルール言語にBorgmonと多くの類似
点があります。
依然としてBorgmonはGoogle内部のものですが、ア
ラートを発するためのデータソースとして時系列デー
タを扱うという発想は、今日ではPrometheus、Riemann、
Heka、Bosunといったオープンソースのツールを通じ
て広く受け入れられており…
Prometheus と google
SRE サイトリライアビリティエンジニアリング
――Googleの信頼性を支えるエンジニアリングチーム
Prometheus 入門から運用まで徹底解説
Logging for Prometheus
1通のメールが発端
Fabian Reinartz
ドイツ ベルリン
2016/04- CoreOS
2015/09-2016/03 SoundCloud/Prometheus
2017年08月10日
To: Prometheus Developers Group
Instead I just want to serve Brian's request to discuss our logging
library usage.
Triggered was this by me using Go kit's logging package in
prometheus/tsdb rather than our so far canonical
prometheus/common/log package.
Prometheusで使用するロギングライブラリについて議論したい。
tsdbではGo kitを使用してたよね。
Prometheusの実装的なお話し
prometheus/tsdb
PrometheusのTime Series Database
ストレージレイヤー
prometheus/Prometheus
メイン実装 prometheus/common/log
github.com/go-kit/kit/log
異なるロギングライブラリを使用している
Prometheusの実装的なお話し
prometheus/tsdb
PrometheusのTime Series Database
ストレージレイヤー
prometheus/Prometheus
メイン実装
prometheus/common/log
github.com/go-kit/kit/log
1つのメソッドをもつインターフェイスがベース
ロギングライブラリを完璧にラッピングしている
18のメソッドをもつ複雑なインターフェイス
ロガーをプラグインで使用してもらうには、Go Kitライブラリは便利。common/logは年月を経て、いろんな副作用
を内在してしまっている。
Prometheusのロギング変更に関する意見
・2種類のライブラリを使用するのは混乱の元なので一貫性が気になる。
・強いこだわりはない
・tsdbはできるだけ一般的でPrometheus固有でないロギングインターフェイスを使用する必要がある
・Go Kit と作者はGo Communityに強い影響力を持っているので一般的に採用可能で、
将来的にも問題ないかな
Switch to go-kit log #3061
https://github.com/prometheus/prometheus/pull/3061
Logging : Go Kit
Gokitのロギング仕様ブック
https://docs.google.com/document/d/1shW9DZJXOeGbG9Mr9Us9MiaPqmlcVatD_D8lrOXRNMU/edit#
Log パッケージで不便な点
とてもシンプルなパッケージ
・非構造体(Printスタイル)
・限定的な設定項目
時間や日付の出力単位
ログの出力パスの指定
・loggerは型で定義されている
・グローバルloggerオブジェクトが提供される
Log パッケージで困ること
・型で定義されているので、別の実装を提供しにくい
・グローバルloggerオブジェクトを呼び出す関数が存在する
インポートしたライブラリのロギングを制御しにくい
・レベル付きロギングが欲しい
debug、info、warn、error
Dave Chene
シドニーのプログラマ
2011年2月からGoのコントリビューター
2011年4月からGoのコミッター
非公式の調査:Goアプリケーションのロギング状況
https://groups.google.com/forum/#!msg/golang-dev/F3l9Iz1JX4g/BOBpbhF-FAAJ
大きく次の3種類のルートを選択している
・fmt.Printf
・logパッケージから関数を使用する
・パッケージレベルのログ変数の宣言
非公式の調査:Goアプリケーションのロギング状況
https://groups.google.com/forum/#!msg/golang-dev/F3l9Iz1JX4g/BOBpbhF-FAAJ
というわけでサードパーティ
乱立するロギングライブラリ
golang/glog
inconshreveable/log15
sirupsen/logrus
uber-go/zap
go-kit/go
ロギングは常時付いて回る
乱立していると、どのライブラリを使用すると良いのか悩む
Prometheusのロギング
go-kit/kit/log
github.com/go-kit/kit/log
promlog/log.go でゆるーくラッピングしている
func New(al AllowedLevel) log.Logger {
l := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
l = log.With(l, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller)
return l
}
Prometheusのロギング
go-kit/kit/log
github.com/go-kit/kit/log
key/value形式の構造化ロギング
レベル付ロギング
文脈情報の付加
JSONフォーマット、テキストフォーマットの出力
Prometheusのロギング
go-kit/kit/log
github.com/go-kit/kit/log
logger.Log("transport", "HTTP", "addr", addr, "msg", "listening")
key/value形式で指定する構造化ログ
var logger log.Logger
logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
logger = log.With(logger, "instance_id", 123)
logger.Log("msg", "starting")
文脈情報の付加
instance_id=123 msg=starting
Prometheusのロギング
go-kit/kit/log
github.com/go-kit/kit/log
var logger log.Logger
logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller)
logger.Log("msg", "hello")
呼び出し元と時間情報の付加
ts=2016-01-01T12:34:56Z caller=main.go:15 msg=hello
Syncthinsのロギング
log
標準パッケージ
log.Println("Lstat:")
log.Printf(" Size: %d bytes", fi.Size())
log.Printf(" Mode: 0%o", fi.Mode())
log.Printf(" Time: %v", fi.ModTime())
log.Printf(" %d.%09d", fi.ModTime().Unix(), fi.ModTime().Nanosecond())
log.Println()
func main() {
log.SetFlags(0)
log.SetOutput(os.Stdout)
Goの標準ライブラリのlogパッケージをそのまま利用。
Terraformのロギング
オリジナル:logutils
github.com/hashicorp/logutils
Goのエコシステムを断片化せずに
標準ライブラリのlogパッケージを拡張して少しモダンにします
→ Logパッケージを使用したまま、logutilsに切り替え可能
package main
import (
"log"
)
func main() {
log.Print("[DEBUG] Debugging")
log.Print("[WARN] Warning")
log.Print("[ERROR] Erring")
log.Print("Message I haven't updated")
}
github.com/hashicorp/logutils
package main
import (
"log"
"os"
"github.com/hashicorp/logutils"
)
func main() {
filter := &logutils.LevelFilter{
Levels: []logutils.LogLevel{"DEBUG", "WARN", "ERROR"},
MinLevel: logutils.LogLevel("WARN"),
Writer: os.Stderr,
}
log.SetOutput(filter)
log.Print("[DEBUG] Debugging")
log.Print("[WARN] Warning")
log.Print("[ERROR] Erring")
log.Print("Message I haven't updated")
}
github.com/hashicorp/logutils
github.com/hashicorp/logutils
Levelsに指定した文字列、順序でLevelが登録される
Levels: []logutils.LogLevel{"DEBUG", "WARN", "ERROR"}
DEBUG, WARN, ERROR
WARN, DEBUG, ERROR
A, B, C
HOGE, FOO, BAR
与えた文字列の[ ]で括られた部分をレベルとして認識する
log.Print("[DEBUG] Debugging")
[DEBUG] FOO
FOOHOGE [DEBUG]
Hogehoge [DEBUG] FOO
LOGにレベル概念を付与し、
指定したレベル以上のログだけを出力させる機能
github.com/hashicorp/logutils
Levelsに指定した文字列、順序でLevelが登録される
Levels: []logutils.LogLevel{"DEBUG", "WARN", "ERROR"}
DEBUG, WARN, ERROR
WARN, DEBUG, ERROR
A, B, C
HOGE, FOO, BAR
与えた文字列の[ ]で括られた部分をレベルとして認識する
log.Print("[DEBUG] Debugging")
[DEBUG] FOO
FOOHOGE [DEBUG]
Hogehoge [DEBUG] FOO
LOGにレベル概念を付与し、
指定したレベル以上のログだけを出力させる機能
x := bytes.IndexByte(line, '[')
if x >= 0 {
y := bytes.IndexByte(line[x:], ']')
if y >= 0 {
level = LogLevel(line[x+1 : x+y])
}
}
_, ok := f.badLevels[level]
Kubernetesのロギング
golang/glog
staging/src/k8s.io/apiserver/pkg/util/logs
実態は、golang/glogを使用している。
k8s.io/apiserver/pkg/util/logs はglogの実装。
glogの既定のFlush時間を30秒から5秒に変更
func InitLogs() {
log.SetOutput(GlogWriter{})
log.SetFlags(0)
go wait.Until(glog.Flush, *logFlushFreq, wait.NeverStop)
}
Kubernetesのロギング
golang/glog
staging/src/k8s.io/apiserver/pkg/util/logs
実態は、golang/glogを使用している。
k8s.io/apiserver/pkg/util/logs はglogの実装。
google内で使用しているC++ロギングと同様のログ実装
Info、Warning、Error、Fatal関数の提供
Infofのような書式設定
Vスタイルのロギング
OpenShiftのロギング
k8s.io/apiserver/pkg/util/logs
github.com/kubernetes/apiserver/tree/master/pkg/util/logs
github.com/golang/glog
実態は、golang/glogを使用している。
Grafanaのロギング
オリジナル:grafana/grafana/pkg/log
github.com/grafana/grafana/pkg/log
inconshreveable/log15を使用している
var logLevels = map[string]log15.Lvl{
"trace": log15.LvlDebug,
"debug": log15.LvlDebug,
"info": log15.LvlInfo,
"warn": log15.LvlWarn,
"error": log15.LvlError,
"critical": log15.LvlCrit,
}
func Debug(format string, v ...interface{}) {
var message string
if len(v) > 0 {
message = fmt.Sprintf(format, v...)
} else {
message = format
}
Root.Debug(message)
}
Grafanaのロギング
inconshreveable/log15
github.com/grafana/grafana/pkg/log
inconshreveable/log15を使用している
key/value の構造型ログ
レベル付きログ
ターミナル出力時のカラーリング対応
ファイル、ストリーム、syslog、ネットワークへの出力
出力のバッファリング
Docker(moby/moby)のロギング
logrus
https://github.com/Sirupsen/logrus
if cli.Config.Experimental {
logrus.Warn("Running experimental build")
}
logrus.SetFormatter(&logrus.TextFormatter{
TimestampFormat: jsonmessage.RFC3339NanoFixed,
DisableColors: cli.Config.RawLogs,
FullTimestamp: true,
})
Docker(moby/moby)のロギング
logrus
https://github.com/Sirupsen/logrus
logrusは構造化Loggerです
レベル付きログ
コンソール出力時のカラー書式設定に対応
出力にJSON形式やテキスト形式、標準出力などに対応
InfluxDBのロギング
zap
github.com/uber-go/zap
func NewService(c Config) (*Service, error) {
s := Service{
checkInterval: time.Duration(c.CheckInterval),
advancePeriod: time.Duration(c.AdvancePeriod),
Logger: zap.New(zap.NullEncoder()),
}
return &s, nil
}
// WithLogger sets the logger for the service.
func (s *Service) WithLogger(log zap.Logger) {
s.Logger = log.With(zap.String("service", "shard-precreation"))
}
InfluxDBのロギング
zap
github.com/uber-go/zap
logrusは構造化Loggerです
レベル付きログ
glg https://github.com/kpango/glg glg is simple and fast leveled logging library for Go.
glog https://github.com/golang/glog Leveled execution logs for Go.
go-cronowriter https://github.com/utahta/go-cronowriter Simple writer that rotate log files automatically based on current date and time, like cronolog.
go-log https://github.com/siddontang/go-log Log lib supports level and multi handlers.
go-log https://github.com/ian-kent/go-log Log4j implementation in Go.
go-logger https://github.com/apsdehal/go-logger Simple logger of Go Programs, with level handlers.
gologger https://github.com/sadlil/gologger Simple easy to use log lib for go, logs in Colored Console, Simple Console, File or Elasticsearch.
gomol https://github.com/aphistic/gomol Multiple-output, structured logging for Go with extensible logging outputs.
gone/log https://github.com/One-com/gone/tree/master/log Fast, extendable, full-featured, std-lib source compatible log library.
log https://github.com/apex/log Structured logging package for Go.
log https://github.com/go-playground/log Simple, configurable and scalable Structured Logging for Go.
log-voyage https://github.com/firstrow/logvoyage Full-featured logging saas written in golang.
log15 https://github.com/inconshreveable/log15 Simple, powerful logging for Go.
logdump https://github.com/ewwwwwqm/logdump Package for multi-level logging.
logex https://github.com/chzyer/logex Golang log lib, supports tracking and level, wrap by standard log lib.
logger https://github.com/azer/logger Minimalistic logging library for Go.
logo https://github.com/mbndr/logo Golang logger to different configurable writers.
logrus https://github.com/Sirupsen/logrus Structured logger for Go.
logrusly https://github.com/sebest/logrusly logrus plug-in to send errors to a Loggly
logutils https://github.com/hashicorp/logutils Utilities for slightly better logging in Go (Golang) extending the standard logger.
logxi https://github.com/mgutz/logxi 12-factor app logger that is fast and makes you happy.
lumberjack https://github.com/natefinch/lumberjack Simple rolling logger, implements io.WriteCloser.
mlog https://github.com/jbrodriguez/mlog Simple logging module for go, with 5 levels, an optional rotating logfile feature and stdout/stderr output.
ozzo-log https://github.com/go-ozzo/ozzo-log
High performance logging supporting log severity, categorization, and filtering. Can send filtered log
messages to various targets (e.g. console, network, mail).
seelog https://github.com/cihub/seelog Logging functionality with flexible dispatching, filtering, and formatting.
slf https://github.com/ventu-io/slf The Structured Logging Facade (SLF) for Go (like SLF4J but structured and for Go).
slog https://github.com/ventu-io/slog The reference implementation of the Structured Logging Facade (SLF) for Go.
spew https://github.com/davecgh/go-spew Implements a deep pretty printer for Go data structures to aid in debugging.
stdlog https://github.com/alexcesaro/log Stdlog is an object-oriented library providing leveled logging. It is very useful for cron jobs.
tail https://github.com/hpcloud/tail Go package striving to emulate the features of the BSD tail program.
xlog https://github.com/xfxdev/xlog Plugin architecture and flexible log system for Go, with level ctrl, multiple log target and custom log format.
xlog https://github.com/rs/xlog Structured logger for `net/context` aware HTTP handlers with flexible dispatching.
参考:awesome-goのLoggingより34種類
まとめ
ロギングは次の3パターンが多い
・fmt.Printf
・logパッケージから関数を使用する
・パッケージレベルのログ変数の宣言
ライブラリは乱立して、これが強いとかない状況
・Prometheus : go-kit/kit/log
・Hashicorp : hashicorp/logutils
・Docker : logrus
・kubernetes : golang/glog
・Grafana : inconshreveable/log15
まとめ
ライブラリは以下のような特徴を持つ傾向
key/value の構造型ログ
レベル付きログ
ターミナル出力時のカラーリング対応や書式設定
出力フォーマット
出力先
出力のバッファリング
目立った特徴を探すのが大変な状況。
自分の好みで良いかも?
ロギングライブラリ・ロギング実装に関する
お話でした
アプリケーションを書く際にロギング実装の検討材料になれば幸いです
Golang
http://sqlazure.jp/r/
コンタクト

Weitere ähnliche Inhalte

Was ist angesagt?

目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説貴仁 大和屋
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 

Was ist angesagt? (20)

WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 

Andere mochten auch

GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)Huy Do
 
20171105 go con2017_lt
20171105 go con2017_lt20171105 go con2017_lt
20171105 go con2017_ltKeigo Suda
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCTim Burks
 
[DO03] 50 分でわかるテスト駆動開発
[DO03] 50 分でわかるテスト駆動開発[DO03] 50 分でわかるテスト駆動開発
[DO03] 50 分でわかるテスト駆動開発de:code 2017
 
An overview of open source in East Asia (China, Japan, Korea)
An overview of open source in East Asia (China, Japan, Korea)An overview of open source in East Asia (China, Japan, Korea)
An overview of open source in East Asia (China, Japan, Korea)OSCON Byrum
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成shouta yoshikai
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
TeXは軽量マークアップの夢を見るか
TeXは軽量マークアップの夢を見るかTeXは軽量マークアップの夢を見るか
TeXは軽量マークアップの夢を見るかKeiichiro Shikano
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)Takuya Kawabe
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版Keiichiro Shikano
 
Alibaba Cloud Serverless
Alibaba Cloud ServerlessAlibaba Cloud Serverless
Alibaba Cloud Serverless真吾 吉田
 
Mbed OS 5の本を書いてみた
Mbed OS 5の本を書いてみたMbed OS 5の本を書いてみた
Mbed OS 5の本を書いてみたJunichi Katsu
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraSpark Summit
 
Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningAmazon Web Services
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)Yuichi Murata
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage librarymametter
 

Andere mochten auch (20)

GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)
 
20171105 go con2017_lt
20171105 go con2017_lt20171105 go con2017_lt
20171105 go con2017_lt
 
Datalab and colaboratory
Datalab and colaboratoryDatalab and colaboratory
Datalab and colaboratory
 
Lightning Network入門
Lightning Network入門Lightning Network入門
Lightning Network入門
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
 
[DO03] 50 分でわかるテスト駆動開発
[DO03] 50 分でわかるテスト駆動開発[DO03] 50 分でわかるテスト駆動開発
[DO03] 50 分でわかるテスト駆動開発
 
An overview of open source in East Asia (China, Japan, Korea)
An overview of open source in East Asia (China, Japan, Korea)An overview of open source in East Asia (China, Japan, Korea)
An overview of open source in East Asia (China, Japan, Korea)
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
TeXは軽量マークアップの夢を見るか
TeXは軽量マークアップの夢を見るかTeXは軽量マークアップの夢を見るか
TeXは軽量マークアップの夢を見るか
 
RSpec 2 Best practices
RSpec 2 Best practicesRSpec 2 Best practices
RSpec 2 Best practices
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
 
Alibaba Cloud Serverless
Alibaba Cloud ServerlessAlibaba Cloud Serverless
Alibaba Cloud Serverless
 
Mbed OS 5の本を書いてみた
Mbed OS 5の本を書いてみたMbed OS 5の本を書いてみた
Mbed OS 5の本を書いてみた
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
 
Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
 
What’s New in Amazon Aurora
What’s New in Amazon AuroraWhat’s New in Amazon Aurora
What’s New in Amazon Aurora
 

Ähnlich wie Gocon2017:Goのロギング周りの考察

インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTDaisuke Ikeda
 
.NET Core diagnostics tips
.NET Core diagnostics tips.NET Core diagnostics tips
.NET Core diagnostics tipsYusuke Fujiwara
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてTakuji Kawata
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidecosmo0920
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
MRTGの導入と運用
MRTGの導入と運用MRTGの導入と運用
MRTGの導入と運用kohei Yamamoto
 
分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218Takashi Okamoto
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Goyaegashi
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyDaisuke Ando
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?Masamitsu Maehara
 
Opa - Cloud Language
Opa - Cloud LanguageOpa - Cloud Language
Opa - Cloud LanguageTozo Tanaka
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)Tetsuyuki Kobayashi
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語GoYoshifumi Yamaguchi
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのかHibino Hisashi
 
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介Kohei Nishikawa
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係moai kids
 

Ähnlich wie Gocon2017:Goのロギング周りの考察 (20)

インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
 
.NET Core diagnostics tips
.NET Core diagnostics tips.NET Core diagnostics tips
.NET Core diagnostics tips
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slide
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
MRTGの導入と運用
MRTGの導入と運用MRTGの導入と運用
MRTGの導入と運用
 
分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+Groovy
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
 
Opa - Cloud Language
Opa - Cloud LanguageOpa - Cloud Language
Opa - Cloud Language
 
組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)組み込みLinuxでのGolangのススメ(Go con版)
組み込みLinuxでのGolangのススメ(Go con版)
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語Go
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか
 
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
 

Gocon2017:Goのロギング周りの考察