Submit Search
Boost.Logとfluentdで始めるログ活用術
6 likes
2,957 views
T
Toshiki Teramura
Boost.Logとfluentdで始めるログ活用術
Technology
Read more
1 of 32
Download now
Downloaded 10 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
More Related Content
PDF
開発速度が速い #とは(LayerX社内資料)
mosa siru
PPTX
本当は恐ろしい分散システムの話
Kumazaki Hiroki
PDF
明日使えないすごいビット演算
京大 マイコンクラブ
PDF
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PDF
.NET Core 3.0時代のメモリ管理
KageShiron
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
PDF
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
開発速度が速い #とは(LayerX社内資料)
mosa siru
本当は恐ろしい分散システムの話
Kumazaki Hiroki
明日使えないすごいビット演算
京大 マイコンクラブ
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
.NET Core 3.0時代のメモリ管理
KageShiron
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
What's hot
(20)
PDF
例外設計における大罪
Takuto Wada
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
PDF
Pythonによる黒魔術入門
大樹 小倉
PDF
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
PDF
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
PPTX
Docker Tokyo
cyberblack28 Ichikawa
PDF
ドメイン駆動設計 本格入門
増田 亨
PDF
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
PDF
15分でわかるGit入門
to_ueda
PPTX
競技プログラミングのためのC++入門
natrium11321
PDF
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
PDF
TLS, HTTP/2演習
shigeki_ohtsu
PDF
Marp Tutorial
Rui Watanabe
PDF
簡易版AutoML+OptunaによるHyperparams Tuning
Masaharu Kinoshita
PDF
5分で分かるgitのrefspec
ikdysfm
PDF
心理的安全性を 0から80ぐらいに上げた話
Yusuke Hisatsu
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
PDF
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
例外設計における大罪
Takuto Wada
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
Pythonによる黒魔術入門
大樹 小倉
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Docker Tokyo
cyberblack28 Ichikawa
ドメイン駆動設計 本格入門
増田 亨
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
15分でわかるGit入門
to_ueda
競技プログラミングのためのC++入門
natrium11321
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
TLS, HTTP/2演習
shigeki_ohtsu
Marp Tutorial
Rui Watanabe
簡易版AutoML+OptunaによるHyperparams Tuning
Masaharu Kinoshita
5分で分かるgitのrefspec
ikdysfm
心理的安全性を 0から80ぐらいに上げた話
Yusuke Hisatsu
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
Ad
Viewers also liked
(8)
PDF
Boost Tour 1.53.0 merge
Akira Takahashi
PDF
Boost study#4
Yuki Tamura
PPTX
Pub/Sub model, msm, and asio
Takatoshi Kondo
PDF
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
hiyohiyo
PDF
C++11やemscriptenと付き合って1年間の振り返り
paosidufgythrj
PDF
Boost Tour 1.53.0
Akira Takahashi
PDF
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
PDF
Boost sg msgpack
Takatoshi Kondo
Boost Tour 1.53.0 merge
Akira Takahashi
Boost study#4
Yuki Tamura
Pub/Sub model, msm, and asio
Takatoshi Kondo
C++でNVMeと(*´Д`)ハァハァ 戯れていたら一年経ってた。
hiyohiyo
C++11やemscriptenと付き合って1年間の振り返り
paosidufgythrj
Boost Tour 1.53.0
Akira Takahashi
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Boost sg msgpack
Takatoshi Kondo
Ad
Similar to Boost.Logとfluentdで始めるログ活用術
(14)
PDF
Big Data入門に見せかけたFluentd入門
Keisuke Takahashi
PDF
fluentd を利用した大規模ウェブサービスのロギング
Yuichi Tateno
PDF
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
PPTX
Fluentd+elasticsearch+kibana(fluentd編)
Daisuke Kikuchi
PPTX
それFluentdで! #fluentd
Atsuko Shibuya
PPTX
Fluentd
Hiroshi Toyama
PPTX
[デブサミ秋2015] 新卒入社エンジニアが2年間fluentdを運用して学んだ事いろいろ
gree_tech
PPTX
Log collect with google fluentd
Zaki_XL
PDF
社内向けTech Talk資料~Fluentdの基本紹介~
Daisuke Ikeda
PDF
Fluentdへようこそ
Manabu Shinsaka
PDF
第二回IoT関連技術勉強会 ログ収集編
tzm_freedom
PDF
FluentdとGrothForecastをインストールする
regret raym
PDF
Boost.PropertyMap (.pdf)
Cryolite
PPTX
Boost.PropertyMap (.pptx)
Cryolite
Big Data入門に見せかけたFluentd入門
Keisuke Takahashi
fluentd を利用した大規模ウェブサービスのロギング
Yuichi Tateno
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
Fluentd+elasticsearch+kibana(fluentd編)
Daisuke Kikuchi
それFluentdで! #fluentd
Atsuko Shibuya
Fluentd
Hiroshi Toyama
[デブサミ秋2015] 新卒入社エンジニアが2年間fluentdを運用して学んだ事いろいろ
gree_tech
Log collect with google fluentd
Zaki_XL
社内向けTech Talk資料~Fluentdの基本紹介~
Daisuke Ikeda
Fluentdへようこそ
Manabu Shinsaka
第二回IoT関連技術勉強会 ログ収集編
tzm_freedom
FluentdとGrothForecastをインストールする
regret raym
Boost.PropertyMap (.pdf)
Cryolite
Boost.PropertyMap (.pptx)
Cryolite
Boost.Logとfluentdで始めるログ活用術
1.
BOOST.LOGとFLUENTDで始めるログ活用術 Boost.勉強会#17@東京 Created by @termoshtt
2.
自己紹介 大学院生(D3) 専攻= 流体数理(物理+ 応用数学) シミュレーション=
C++ データ解析= Python
3.
CONTENTS fluentd : ログ収集のための共通基盤 Boost.Logの構成と使い方
4.
WHY DO WE
NEED LOG?
5.
一人で使う 時間のかかる処理の進捗 デバッグ
6.
人の書いたコードを使う FOR LIBRARIAN 問題が発生した事をユーザーに伝える 問題を解決するための情報を集める FOR USER 発生した状況の情報を得る 開発者に問題を解決してもらうために情報を提供する
7.
つまり人が目視で確認する
9.
FLUENTD ログを集約するための共通フォーマット リアルタイムにログを転送
10.
FLUENTD 様々なログを収集するためのプラグイン apache syslog ... 様々なストレージに保存するためのプラグイン elasticsearch ...
11.
FLUENTD 標準出力としてのfluentd UNIX的に解析ツールを組み合わせる事が可能
12.
BOOST.LOGの使い方
13.
BOOST.LOG フル機能のロギングライブラリ custom logger log filtering custom
sink
16.
ログの収集 名前空間/クラスにロガーを追加 namespace mod { namespace
logging = boost::log; namespace log { namespace attrs = logging::attributes; namespace src = logging::sources; } using severity_level = logging::trivial::severity_level; BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT( logger, src::severity_logger_mt<severity_level>); void init(); } // namespace mod
17.
ログの収集 ロガー毎に属性を付与 namespace mod { void
init() { auto &lg = logger::get(); lg.add_attribute("Tag", log::attrs::make_constant("mod")); // lg.add_attribute("Tag", attrs::constant<std::string>("mod1")); lg.add_attribute("Scope", log::attrs::named_scope()); } } // namespace mod
18.
ログの収集 属性のキーワードを登録 キーワードを用いて出力・フィルターを制御する BOOST_LOG_ATTRIBUTE_KEYWORD(line_id, "LineID", unsigned
int) BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level) BOOST_LOG_ATTRIBUTE_KEYWORD(tag_attr, "Tag", std::string) BOOST_LOG_ATTRIBUTE_KEYWORD(scope, "Scope", log::attrs::named_scope::value
19.
ログの収集 出力時に情報を追加 namespace mod { void
func() { BOOST_LOG_FUNCTION() // Scopeの値を設定(mod->func) auto &lg = logger::get(); if (flag) { BOOST_LOG_NAMED_SCOPE("true case"); // Scopeに入った事を記録する BOOST_LOG_SEV(lg, severity_level::info) << "flag is true"; } else { BOOST_LOG_NAMED_SCOPE("false case"); // Scopeに入った事を記録する BOOST_LOG_SEV(lg, severity_level::info) << "flag is false"; } BOOST_LOG_SEV(lg, severity_level::error) << "Some error occurs!!" } } // namespace mod
20.
ログのフィルタリング placeholderを使用する logging::core::get()->set_filter( logging::trivial::severity >= logging::trivial::info
// lambda-exp. );
21.
ログのフィルタリング fluentd以降で解析する以上、C++側でフィルターする 意義はあまりない
22.
ログの出力 様々な出力形式に対応 /* 文字列フォーマット */ logging::add_file_log( keywords::file_name
= "client.log", keywords::format = "%Tag%: [%TimeStamp%] [%Scope%] %Message%" ); /* lambda-style */ logging::add_file_log( keywords::file_name = "stream_format.log", keywords::format = ( expr::stream << mod::tag_attr << mod::line_id << ": <" << mod::severity << "> [" << mod::scope << "] " << expr::smessage ) );
23.
ログの出力 int main() { init();
// いろいろ初期化 mod1::func1(true); mod1::func1(false); return 0; } mod: [2015-Mar-04 01:38:57.711251] [void mod::func(bool)->true case mod: [2015-Mar-04 01:38:57.711620] [void mod::func(bool)] Some error occur mod: [2015-Mar-04 01:38:57.711667] [void mod::func(bool)->false case mod: [2015-Mar-04 01:38:57.711698] [void mod::func(bool)] Some error occur
24.
ログの出力 どのようなフォーマットを使用するか? LTSV (Labeled Tab-Separated
Values) damp/parseが簡単 属性を追加するのが簡単 型は無く、全て文字列 解析側で型を戻す必要がある JSON formatが少し面倒
25.
ログの出力 typedef std::vector<std::pair<std::string, std::string>
> Attrs; void add_file_log(std::string filename, const Attrs &attr, bool auto_flush std::stringstream ss; for (auto &&pair : attr) { const std::string &key = pair.first; const std::string &val = pair.second; if (!ss.str().empty()) ss << "t"; ss << key << ":%" << val << "%"; } logging::add_file_log( keywords::file_name = filename, keywords::format = ss.str(), keywords::auto_flush = auto_flush ); }
26.
ログの出力 デバッグ時に属性を追加するのが簡単 BOOST_LOG_SEV(lg, KSE::info) << "update
infost" << "new_max_index:" << max_index << "t" << "step:" << (t / interval) << "t" << "count:" << count;
27.
COMPILE WITH CMAKE find_package(Boost
COMPONENTS thread system log log_setup REQUIRED) find_package(Threads) add_definitions("-DBOOST_LOG_DYN_LINK") macro(logged_executable name) add_executable(${name} ${name}.cpp) target_link_libraries( ${name} ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${ARGN} ) endmacro(logged_executable)
28.
説明できなかった事 LTSVへの自動的なフォーマット channel fluentd側での解析例
29.
BOOST.LOGを使いたい理由 Boostに入ってる 高機能 実行時のオーバーヘッドが小さい(未確認)
30.
BOOST.LOGを使いたくない理由 placeholder難しい コンパイル遅い
31.
THE END - Source
codes (GitHub)
Download