CARVIEW |
Select Language
HTTP/2 200
date: Wed, 08 Oct 2025 18:04:41 GMT
content-type: text/html; charset=utf-8
cache-control: max-age=0, private, must-revalidate
cf-cache-status: DYNAMIC
link: ; rel=preload; as=style; nopush,; rel=preload; as=script; nopush,; rel=preload; as=style; nopush,; rel=preload; as=script; nopush,; rel=preload; as=script; nopush
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
referrer-policy: strict-origin-when-cross-origin
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=0lVDBhIw4C81XwsQ%2BSIZVphl8zKVmT0NYohUzLxPHQI%3D\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\u0026ts=1759946681"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=0lVDBhIw4C81XwsQ%2BSIZVphl8zKVmT0NYohUzLxPHQI%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1759946681"
server: cloudflare
strict-transport-security: max-age=0; includeSubDomains
vary: Accept,Accept-Encoding
via: 2.0 heroku-router
x-content-type-options: nosniff
x-permitted-cross-domain-policies: none
x-request-id: beb29324-3329-3463-cb74-3c00a4903fca
x-runtime: 0.146356
x-xss-protection: 0
content-encoding: gzip
set-cookie: _secure_speakerd_session=KXyp3fKZALtNV47qh0YLEyaRXnrRyQpVQs60g6PN32NtmkUJhij%2Bicac%2Fvlgipr3JQ2fvDWKYzIsJ0fQMj%2B%2Fl4AzqrWcTUlcR2wQiRHgOQaK7vvn7xmz55w2vFaQ92wMBc3KSbAylbOQ%2FrKbiVYKL3sZTAT4G8g%2B3kWJDxMWGPct%2BaclPreOjjphdmZ%2BQ%2Fi0STTi5I%2BfNt6k0fZ3x9%2BKAQ8X3gBB1%2Bw6oianVMJI0DpkSjU9Pxuu9imHFy9G0QeX%2FeB%2Fqonvde1MqFoj53IndfbbU4hp4sgxYfrHrp5Mbax3B%2FccF9oKDUbhZfGVR06KJjD0ES1oHvY0frFHX%2B4KApPcK0UxbaXDkosJz6%2BKLzA%2FNse2s6xN6oTPr7tKy5taV6ik99xCRROY%2FEcKDRf11DnQ--Yw%2FpX1YdtglSuuI1--kRGmF28FJaaoRQQ7e8btZw%3D%3D; HttpOnly; SameSite=Lax; Secure; Path=/; Expires=Wed, 22 Oct 2025 18:04:41 GMT
cf-ray: 98b78fe17fe1c18d-BLR
サーバモニタリング向け時系列データベースの探究 / The study of time-series database for server monitoring - Speaker Deck
サーバモニタリング向け時系列データベースの探究 / The study of time-series database for server monitoring
第9回インターネットと運用技術シンポジウム(IOTS2016)での招待講演スライド。
ITシステムの高度化に伴い、サーバモニタリングの需要が高まっている。
その背景には、システムの大規模化およびサーバ仮想化技術の普及によるサーバ台数の増加など運用技術のパラダイムの変遷がある。
その結果、サーバモニタリングを支える基盤となる時系列データベースには、大量のメトリックの書き込みと高精度かつ長期間のデータ保存が求められている。
しかし、これらの要件を満たしつつ、 運用しやすい既存の時系列データベースがないという課題がある。
そこで、サーバ監視サービスMackerelでは、これらの問題を解決するための時系列データベースを開発している。
本講演では、低コストで、24時間365日稼働し、スケールする時系列データベースの実現に向けた講演者の探究を紹介する。
Yuuki Tsubouchi (yuuk1)
December 01, 2016
More Decks by Yuuki Tsubouchi (yuuk1)
Other Decks in Technology
Featured
Transcript
-
ʮӡ༻ͰΧόʔ͢Δʯ ʮӡ༻୲ऀͷਓபͷ্ʹཱ͢Δ લ࣌తͰ൮ͳߏʯ ʮෆշͳ൰͍͠ࣄΛΔඞཁ͕ͳ͘ͳΔͷ ɺਓؒʹͱͬͯͻ͡ΐ͏ͳࢱ͔͠Εͳ ͍͕ɺ͋Δ͍ͦ͏Ͱͳ͍͔͠Εͳ͍ɻʯ ୈ 9 ճΠϯλʔωοτͱӡ༻ٕज़γϯϙδϜ ։࠵Ҋ
https://www.iot.ipsj.or.jp/iots/2016/announcement -
We define toil as mundane, repetitive operational work providing no
enduring value, which scales linearly with service growth. Betsy Beyer, Chris Jones, Jennifer Petoff, etc. Site Reliability Engineering. Oreilly & Associates Inc. April, 2016. -
࣌ܥྻσʔλͷอଘ TSDB αʔό (ܥྻ໊, λΠϜελϯϓ, ) (ܥྻ໊, λΠϜελϯϓ, ) (ܥྻ໊,
λΠϜελϯϓ, ) … ཧαʔό αʔό αʔό ΤʔδΣϯτ ΤʔδΣϯτ ΤʔδΣϯτ -
࣌ܥྻσʔλͷنײ TSDB αʔό (ܥྻ໊, λΠϜελϯϓ, ) (ܥྻ໊, λΠϜελϯϓ, ) (ܥྻ໊,
λΠϜελϯϓ, ) … ཧαʔό αʔό αʔό ΤʔδΣϯτ ΤʔδΣϯτ ΤʔδΣϯτ 1000 100 datapoints/min/host 100,000 writes/min -
Mackerelͷ࣌ܥྻσʔλͷنײ • ΤʔδΣϯτ͕Ϣʔβ͞Μͷϗετ͔ΒຖϝτϦοΫ ߘ • 2016/01࣌ͰΞΫςΟϒΤʔδΣϯτ 10,000+ • 1ΤʔδΣϯτ͋ͨΓͷϝτϦοΫ࠷େ200 •
ԾʹฏۉϝτϦοΫΛ100 datapoints/hostͱ͢Δͱ ߹ܭૹ৴ϝτϦοΫ 1,000,000 datapoints/min+ • ϝτϦοΫͷେྔॻ͖ࠐΈʹ͑ΒΕΔσʔλϕʔε͕ ඞཁ -
2012 ֶੜ࣌ʹͯͳͰΞϧόΠτ • MackerelͷલͱͳΔΞϓϦέʔγϣϯ։ൃʹܞΘΔ • RRDtoolͱ͍͏2000ॳ಄ͷTSDBͰάϥϑඳը • ͦͦωοτϫʔΫσʔϞϯͰͳ͍ͨΊɺίϚϯυ Λ͍ͨͨͯͷߋ৽ࢀরΛ͍ͯͨ͠ •
CPANϞδϡʔϧͷ࡞ https://metacpan.org/pod/RRDTool::Rawish • ϝτϦοΫͷΫϩʔϦϯάͱRRDtoolϕʔεͰάϥϑද ࣔͰ͖Δπʔϧͷ࡞ https://github.com/yuuki/ Monitorel -
2014 ͯͳೖࣾ • Mackerelͷ։ൃͱ͋ΘͤͯGraphiteͷݕূΛ։࢝ • RRDtoolεέʔϥϏϦςΟ৴པੑͳͲ͞·͟·ͳ Ͱ͕͋ͬͨ • GraphiteγϯϓϧͰ࣮Λཧղ͘͢͠ɺӡ༻ʹख ͔͔ؒΔ͕ͦΕͳΓʹΑ͘εέʔϧ͍ͯ͠Δ
• ϐʔΫ࣌Ͱඵؒ8ສ write IOPS (͍҆SSD ेຕ) • ϑΝΠϧγεςϜετϨʔδͷಛੑʹ͋Θͤͯνϡʔ χϯά͠ଓ͚͍ͯΔ -
ݱߦͷΞʔΩςΫνϟ(Graphite)ͷ՝ • εέʔϧΞτʹେ͖ͳਓख͕͔͔Δ • ݱࡏioDriveͷΑ͏ͳߴͳϑϥογϡετϨʔδΛ༻͍ ͯεέʔϧΞοϓ • ߴͳετϨʔδ͕ඞཁͳͨΊɺGB୯Ձ͕ඇৗʹߴ͍ • ϥϯυϩϏϯσʔλϕʔεͰ͋ΔͨΊɺݹ͍σʔλΛ্ॻ
͖͢Δ • ͕ͨͬͯ͠ɺݹ͍σʔλΛผͷετϨʔδୀආͤ͞ΔΑ͏ ͳ࣮ΛՃ͑Δ͜ͱ͕͍͠ • ΦϯϝϞϦͳϦϨʔϓϩΩγΛॻ͖ࠐΈཁٻΛதܧ͢ΔͨΊɺ ϦϨʔϓϩΩγ͕མͪΔͱσʔλ͚͕ܽى͖ΔՄೳੑ͕͋Δ -
TSDBʹؔ͢Δֶज़ݚڀจʢGorillaʣ Tuomas Pelkonen etc. Gorilla: a fast, scalable, in-memory time
series database. In Proceedings of the 41st International Conference on Very Large Data Bases, Kohala Coast, Hawaii. Volume 8 Issue 12, August 2015. Pages 1816-1827 • Facebook͕։ൃ͍ͯ͠ΔTSDB • ۙ26࣌ؒͷΈΠϯϝϞϦͰ֨ೲ • ࣌ܥྻσʔλͷղ૾15ඵ • ϝϞϦʹͷͤΔͨΊʹಠࣗͷѹॖํࣜΛఏҊ • ුಈখಉ͡ܥྻʹ͓͍ͯಉ͕͡࿈ଓ͢Δ έʔε͕ଟ͍͜ͱʹணͨࠩ͠ූ߸Խ • ݹ͍σʔλHBaseʹಀ͕͢ -
TSDBʹؔ͢Δֶज़ݚڀจʢBTrDBʣ Michael P Andersen and David E. Culler, University of
California, Berkeley. BTrDB: Optimizing Storage System Design for Timeseries Processing. In Proceedings of the 14th USENIX Conference on File and Storage Technologies (FAST 16). Feb 2016. Pages 39-52. • IoT͚ͷTSDB • nanoඵʹରԠ • σʔλߏcopy-on-write treeϕʔεͷͷͰI/Oޮ ͕ඇৗʹߴ͍ • 16.7 million writes/s and 19.8 million reads/s (EC2 c3.8xlarge) • GoݴޠʹΑΔ࣮͕ެ։͞Ε͍ͯΔ • https://github.com/SoftwareDefinedBuildings/btrdb -
ͦͷଞͷTSDBͷ՝ • InfluxDB: RaftϓϩτίϧΛ༻͍ͨԽػߏΛ༻൛ͷΈͰα ϙʔτ • ӡ༻͕͍͠ࢄDB্ʹߏங͞Ε͍ͯΔ • OpenTSDBHBase, KairosDBCassandra্ʹߏஙͳͲ
• 1ͷϨϙʔτද͕͍ࣔ • (ະ֬ೝ͕ͩ) OpenTSDBɺInfluxDBͳͲ • ޙड़͢Δղ૾ςʔϒϧ࡞ʹ૬͢Δ࣮͕ඞཁ • ϓϩμΫγϣϯʹར༻Մೳͳ࣭ͷιϑτΣΞͰͳ͍ • BTrDBdevelopment version • ίϛϡχςΟͰͷ࣮͕ͳ͍ -
ࠓޙͷTSDBʹٻΊΒΕΔػೳ • ߴղ૾σʔλͷظอଘ • ߴղ૾σʔλͷରԠ • େྔͷܥྻͷߴදࣔ • (ܥྻʹର͢Δϝλσʔλඥ͚) •
(ػցֶशΛ༻͍ͨҟৗݕྨࣅϝτϦοΫ ݕࡧ) -
TSDBʹٻΊΒΕΔੑ࣭ • TSDBͱͯ͠ͷجຊతͳػೳ • ৴པੑ • εέʔϥϏϦςΟ • ߴͳϨεϙϯελΠϜ •
ίετ ← Graphiteϕʔεͷ ΠϯλϑΣʔε ← ϚωʔδυαʔϏεͰ୲อ ← ϚωʔδυαʔϏεͰ୲อ ← σʔλߏ ɹσʔλஔͷ ← ݹ͍σʔλΛ͍҆ετϨʔδୀආ ← ͦͷଞɺෳͷ࠷దԽΛ࣮ࢪ -
write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ
ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read -
write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ
ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read -
write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ
ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read 3छͷDB ۙ1࣌ؒ ίʔϧυσʔλ ϗοτσʔλ -
write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ
ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read ΩϡʔͷલޙͰܥΛׂ -
write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ
ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read 3छDB͔ΒಡΈ͚Δ WebΞϓϦέʔγϣϯ GraphiteޓͷΠϯλϑΣʔε -
write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ
ετϨʔδ read datapoints subscribe put & rollup put purge table read read read ,JOFTJT -BNCEB 3FEJT$MVTUFS %ZOBNP%# 4 ϚωʔδυαʔϏεͳͷͰ جຊతʹεέʔϧΞτ ੑอূ͞Ε͍ͯΔ -
ΦϯσΟεΫDB (DynamoDB)ͷεΩʔϚઃܭ ߦΩʔ ྻσʔλ ϝτϦοΫ໊ [ timestamp(int32):value(float64), … ] TFSWFSMPBEBWH
< ʜ> TFSWFSMPBEBWH < ʜ> ಉ͡ܥྻͷϝτϦοΫͷϦετ -
Time-based range partitioning (DynamoDB) ߦΩʔ ྻσʔλ ϝτ ϦοΫ ໊ [
timestamp(int 32):value(float 64), … ] TFSWFS MPBEB WH <ʜ> 2016/11/30 2016/11/29 2016/11/22 ߦΩʔ ྻσʔλ ϝτ ϦοΫ ໊ [ timestamp(int 32):value(float 64), … ] TFSWFS MPBEB WH <ʜ> ߦΩʔ ྻσʔλ ϝτ ϦοΫ ໊ [ timestamp(int 32):value(float 64), … ] TFSWFS MPBEB WH <ʜ> …… େྔϨίʔυআॲཧෛՙ͕ߴ͍ͨΊ ݹ͍ςʔϒϧΛυϩοϓ͢ΔΑ͏ʹ େ༰ྔ ετϨʔδ ྻσʔλΛҰఆαΠζʹऩΊΔ෭࣍తޮՌ -
Write-through cache (Redis +DynamoDB) Redis ߦΩʔ ྻσʔλ ϝτϦο Ϋ໊ [
timestamp(int32):va lue(float64), … ] TFSWFSMP BEBWH <ʜ> DynamoDB ίϯγϡʔϚ ҰఆҎ্ಉ͡ܥྻͷσʔλϙΠϯτ͕ ͨ·ͬͨΒϑϥογϡ ౸ணͨ͠ σʔλϙΠϯτΛ ΠϯϝϞϦDBʹ֨ೲ -
GraphiteޓWebαʔόͷI/OଟॏԽ Redis DynamoDB S3 … … BatchGetItem
API (100items) εϨου εϨουʹΑΓ I/OଟॏԽ͠ ϨεϙϯελΠϜ ΛߴԽ -
৽TSDBΞʔΩςΫνϟͷܽ • ΦϯϓϨϛεڥͰ࣮ݱͰ͖ͳ͍ • ͨͩ͠ɺӡ༻ίετΛແࢹ͢ΕࣅͨΑ͏ͳOSS࣮ ʹஔ͖͑Մೳ • Kinesis=>KafkaɺDynamoDB=>CassandraͳͲ • ίϯϙʔωϯτ͕ଟ͍ͨΊɺҰݟෳࡶͰ͋Δ
• ൚༻DBʹ͍ͭͯੑೳίετΛ࠷దԽ͠Α͏ͱ͢Δ ͱɺͲ͏ͯ͠ෳͷಛੑΛͭDBΛΈ߹ΘͤΔ ඞཁ͕͋Δ -
ҟͳΔෳͷDBͷΈ߹Θͤ • WebΞϓϦέʔγϣϯͷੈքͰΑ͘࠾༻͞Ε Δख๏ • ϝΠϯσʔλϕʔεRDBMSͱͯ͠MySQL PostgreSQLΛར༻ • ੑೳ͕ٻΊΒΒΕΔͱ͜ΖɺKVSͱͯ͠Redis memcachedΛར༻
• ݕࡧΤϯδϯͱͯ͠ɺElasticsearchSolrΛར༻ -
·ͱΊ • αʔόϞχλϦϯάγεςϜӡ༻ͷॏཁͳج൫ • αʔόϞχλϦϯάͷίϯϙʔωϯτͷ͏ͪɺಛʹ TSDBʹ՝͕͋Δ • TSDBͷཁٻϨϕϧ͕ߴ·͍ͬͯΔҰํͰɺܾఆ൛͕ͳ͍ • ϚωʔδυαʔϏε͔ͭෳͷ൚༻ετϨʔδΛΈ߹
ΘͤͨTSDBΛ࣮͢Δख๏Λհ • TSDBͷ։ൃΛྫʹWebαʔϏεͷӡ༻ࣄΛؒతʹ հ