サーバモニタリング向け時系列データベースの探究 / The study of time-series database for server monitoring

サーバモニタリング向け時系列データベースの探究 / The study of time-series database for server monitoring

第9回インターネットと運用技術シンポジウム(IOTS2016)での招待講演スライド。

ITシステムの高度化に伴い、サーバモニタリングの需要が高まっている。
その背景には、システムの大規模化およびサーバ仮想化技術の普及によるサーバ台数の増加など運用技術のパラダイムの変遷がある。
その結果、サーバモニタリングを支える基盤となる時系列データベースには、大量のメトリックの書き込みと高精度かつ長期間のデータ保存が求められている。
しかし、これらの要件を満たしつつ、 運用しやすい既存の時系列データベースがないという課題がある。
そこで、サーバ監視サービスMackerelでは、これらの問題を解決するための時系列データベースを開発している。
本講演では、低コストで、24時間365日稼働し、スケールする時系列データベースの実現に向けた講演者の探究を紹介する。

A658ec7f1badf73819dfa501165016c1?s=128

Yuuki Tsubouchi (yuuk1)

December 01, 2016
Tweet

Transcript

  1. 3.
  2. 4.

    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.
  3. 18.
  4. 26.

    ࣌ܥྻσʔλͷอଘ TSDB αʔό (ܥྻ໊, λΠϜελϯϓ, ஋) (ܥྻ໊, λΠϜελϯϓ, ஋) (ܥྻ໊,

    λΠϜελϯϓ, ஋) … ؅ཧαʔό αʔό αʔό ΤʔδΣϯτ ΤʔδΣϯτ ΤʔδΣϯτ
  5. 27.

    ࣌ܥྻσʔλͷن໛ײ TSDB αʔό (ܥྻ໊, λΠϜελϯϓ, ஋) (ܥྻ໊, λΠϜελϯϓ, ஋) (ܥྻ໊,

    λΠϜελϯϓ, ஋) … ؅ཧαʔό αʔό αʔό ΤʔδΣϯτ ΤʔδΣϯτ ΤʔδΣϯτ 1000୆ 100 datapoints/min/host 100,000 writes/min
  6. 33.

    Mackerelͷ࣌ܥྻσʔλͷن໛ײ • ΤʔδΣϯτ͕Ϣʔβ͞Μͷϗετ͔Βຖ෼ϝτϦοΫ ౤ߘ • 2016/01࣌఺ͰΞΫςΟϒΤʔδΣϯτ਺ 10,000+ • 1ΤʔδΣϯτ͋ͨΓͷϝτϦοΫ਺͸࠷େ200 •

    ԾʹฏۉϝτϦοΫ਺Λ100 datapoints/hostͱ͢Δͱ ߹ܭૹ৴ϝτϦοΫ਺ 1,000,000 datapoints/min+ • ϝτϦοΫͷେྔॻ͖ࠐΈʹ଱͑ΒΕΔσʔλϕʔε͕ ඞཁ
  7. 36.

    2012೥ ֶੜ࣌୅ʹ͸ͯͳͰΞϧόΠτ • Mackerelͷલ਎ͱͳΔΞϓϦέʔγϣϯ։ൃʹܞΘΔ • RRDtoolͱ͍͏2000೥୅ॳ಄ͷTSDBͰάϥϑඳը • ͦ΋ͦ΋ωοτϫʔΫσʔϞϯͰͳ͍ͨΊɺίϚϯυ Λ͍ͨͨͯ஋ͷߋ৽΍ࢀরΛ͍ͯͨ͠ •

    CPANϞδϡʔϧͷ࡞੒ https://metacpan.org/pod/RRDTool::Rawish • ϝτϦοΫͷΫϩʔϦϯάͱRRDtoolϕʔεͰάϥϑද ࣔͰ͖Δπʔϧͷ࡞੒ https://github.com/yuuki/ Monitorel
  8. 47.

    ݱߦͷΞʔΩςΫνϟ(Graphite)ͷ՝୊ • εέʔϧΞ΢τʹେ͖ͳਓख͕͔͔Δ • ݱࡏ͸ioDriveͷΑ͏ͳߴ଎ͳϑϥογϡετϨʔδΛ༻͍ ͯεέʔϧΞοϓ • ߴ଎ͳετϨʔδ͕ඞཁͳͨΊɺGB୯Ձ͕ඇৗʹߴ͍ • ϥ΢ϯυϩϏϯσʔλϕʔεͰ͋ΔͨΊɺݹ͍σʔλΛ্ॻ

    ͖͢Δ • ͕ͨͬͯ͠ɺݹ͍σʔλΛผͷετϨʔδ΁ୀආͤ͞ΔΑ͏ ͳ࣮૷ΛՃ͑Δ͜ͱ͕೉͍͠ • ΦϯϝϞϦͳϦϨʔϓϩΩγΛॻ͖ࠐΈཁٻΛதܧ͢ΔͨΊɺ ϦϨʔϓϩΩγ͕མͪΔͱσʔλ͚͕ܽى͖ΔՄೳੑ͕͋Δ
  9. 49.

    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ʹಀ͕͢
  10. 50.

    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
  11. 52.

    ͦͷଞͷTSDBͷ՝୊ • InfluxDB: RaftϓϩτίϧΛ༻͍ͨ৑௕ԽػߏΛ঎༻൛ͷΈͰα ϙʔτ • ӡ༻͕೉͍͠෼ࢄDB্ʹߏங͞Ε͍ͯΔ • OpenTSDB͸HBase, KairosDB͸Cassandra্ʹߏஙͳͲ

    • 1೥ͷϨϙʔτද͕ࣔ஗͍ • (ະ֬ೝ͕ͩ) OpenTSDBɺInfluxDBͳͲ • ޙड़͢Δ௿ղ૾౓ςʔϒϧ࡞੒ʹ૬౰͢Δ࣮૷͕ඞཁ • ϓϩμΫγϣϯʹར༻Մೳͳ඼࣭ͷιϑτ΢ΣΞͰ͸ͳ͍ • BTrDB͸development version • ίϛϡχςΟͰͷ࣮੷͕ͳ͍
  12. 60.

    TSDBʹٻΊΒΕΔੑ࣭ • TSDBͱͯ͠ͷجຊతͳػೳ • ৴པੑ • εέʔϥϏϦςΟ • ߴ଎ͳϨεϙϯελΠϜ •

    ௿ίετ ← Graphiteϕʔεͷ ΠϯλϑΣʔε ← ϚωʔδυαʔϏεͰ୲อ ← ϚωʔδυαʔϏεͰ୲อ ← σʔλߏ଄΍ ɹσʔλ഑ஔͷ޻෉ ← ݹ͍σʔλΛ͍҆ετϨʔδ΁ୀආ ← ͦͷଞɺෳ਺ͷ࠷దԽΛ࣮ࢪ
  13. 62.

    write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ

    ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read
  14. 63.

    write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ

    ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read
  15. 64.

    write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ

    ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read 3छͷDB ௚ۙ1࣌ؒ ίʔϧυσʔλ ϗοτσʔλ
  16. 65.

    write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ

    ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read ΩϡʔͷલޙͰܥΛ෼ׂ
  17. 66.

    write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ

    ετϨʔδ read datapoints subscribe flush & rollup put purge table read read read 3छDB͔ΒಡΈ෼͚Δ WebΞϓϦέʔγϣϯ Graphiteޓ׵ͷΠϯλϑΣʔε
  18. 67.

    write datapoints ϝοηʔδΩϡʔ ίϯγϡʔϚ ΠϯϝϞϦ DB Webαʔό ΦϯσΟεΫ DB େ༰ྔ

    ετϨʔδ read datapoints subscribe put & rollup put purge table read read read ,JOFTJT -BNCEB 3FEJT$MVTUFS %ZOBNP%# 4 ϚωʔδυαʔϏεͳͷͰ جຊతʹεέʔϧΞ΢τ΍
 ৑௕ੑ͸อূ͞Ε͍ͯΔ
  19. 69.

    ΦϯσΟεΫDB (DynamoDB)ͷεΩʔϚઃܭ ߦΩʔ ྻσʔλ ϝτϦοΫ໊ [ timestamp(int32):value(float64), … ] TFSWFSMPBEBWH

    <  ʜ> TFSWFSMPBEBWH <  ʜ> ಉ͡ܥྻͷϝτϦοΫͷϦετ
  20. 70.

    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 <ʜ> …… େྔϨίʔυ࡟আॲཧ͸ෛՙ͕ߴ͍ͨΊ ݹ͍೔෇ςʔϒϧΛυϩοϓ͢ΔΑ͏ʹ େ༰ྔ ετϨʔδ ྻσʔλΛҰఆαΠζʹऩΊΔ෭࣍తޮՌ
  21. 71.

    Write-through cache (Redis +DynamoDB) Redis ߦΩʔ ྻσʔλ ϝτϦο Ϋ໊ [

    timestamp(int32):va lue(float64), … ] TFSWFSMP BEBWH <ʜ> DynamoDB ίϯγϡʔϚ ҰఆҎ্ಉ͡ܥྻͷσʔλϙΠϯτ͕ ͨ·ͬͨΒϑϥογϡ ౸ணͨ͠ σʔλϙΠϯτΛ ΠϯϝϞϦDBʹ֨ೲ
  22. 72.

    Graphiteޓ׵WebαʔόͷI/OଟॏԽ Redis DynamoDB S3    … … BatchGetItem

    API (100items) εϨου εϨουʹΑΓ I/OଟॏԽ͠ ϨεϙϯελΠϜ Λߴ଎Խ