<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Influxdb on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog.ponkotools.com/tags/influxdb/</link><description>Recent content in Influxdb on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Fri, 06 Jan 2023 00:00:00 +0900</lastBuildDate><atom:link href="https://blog.ponkotools.com/tags/influxdb/index.xml" rel="self" type="application/rss+xml"/><item><title>Grafana Cloud で InfluxDB v2 のデータを可視化する</title><link>https://blog.ponkotools.com/posts/2023/01/06/influxdb-cloud/</link><pubDate>Fri, 06 Jan 2023 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2023/01/06/influxdb-cloud/</guid><description>&lt;p&gt;InfluxDB v2 ではそれ自体でダッシュボードの作成もできますが、まだまだ使いにくかったり細かい設定ができなかったりしたので、使い慣れている Grafana を使うことにしました。&lt;br&gt;
また、この機会に Grafana もオンプレミス版からクラウドサービスの Grafana Cloud に変更しました。&lt;/p&gt;
&lt;p&gt;Grafana Cloud へのサインアップ方法などは割愛します。&lt;/p&gt;
&lt;h2 id="データソースの設定"&gt;&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;データソースの設定
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;サイドメニューから &lt;code&gt;Data Sources&lt;/code&gt; を選択します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Add data source&lt;/code&gt; をクリックし、&lt;code&gt;InfluxDB&lt;/code&gt; をクリックします。&lt;/li&gt;
&lt;li&gt;InfluxDB の情報を入力します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;InfluxDB Cloud の場合、&lt;code&gt;Query Language&lt;/code&gt; は &lt;code&gt;Flux&lt;/code&gt; を選択します。&lt;br&gt;
また、URL, トークン、バケット名が必要になるので、以下を参考に取得しておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2022/12/influxdb-cloud.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2022/12/influxdb-cloud.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ダッシュボードパネルの作成"&gt;&lt;a href="#%e3%83%80%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9c%e3%83%bc%e3%83%89%e3%83%91%e3%83%8d%e3%83%ab%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;ダッシュボード（パネル）の作成
&lt;/h2&gt;&lt;p&gt;InfluxDB v1 では GUI でポチポチと設定していくだけでグラフが表示できましたが、InfluxDB v2 では Flux で処理を書いていく必要があります。&lt;br&gt;
最初は難しかったですが、慣れればこちらのほうが簡単に思えてきました。&lt;br&gt;
いくつか例を挙げます。&lt;/p&gt;
&lt;h3 id="基本"&gt;&lt;a href="#%e5%9f%ba%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;基本
&lt;/h3&gt;&lt;p&gt;以下にサンプルがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/docs/grafana/latest/datasources/influxdb/query-editor/#use-macros" target="_blank" rel="noopener"
 &gt;https://grafana.com/docs/grafana/latest/datasources/influxdb/query-editor/#use-macros&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from(bucket:&amp;#34;バケット名&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; range(start: v.timeRangeStart, stop: v.timeRangeStop)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r._measurement == &amp;#34;メジャーメント名&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r[&amp;#34;_field&amp;#34;] == &amp;#34;表示したいフィールドの名前&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; aggregateWindow(every: v.windowPeriod, fn: mean)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基本的にはこれでグラフが作成できます。&lt;/p&gt;
&lt;h3 id="一日ごとのデータを表示"&gt;&lt;a href="#%e4%b8%80%e6%97%a5%e3%81%94%e3%81%a8%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e8%a1%a8%e7%a4%ba" class="header-anchor"&gt;&lt;/a&gt;一日ごとのデータを表示
&lt;/h3&gt;&lt;p&gt;例えば株価の終値を表示したい場合などは以下のようにすることでできました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import &amp;#34;timezone&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;option location = timezone.location(name: &amp;#34;Asia/Tokyo&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from(bucket:&amp;#34;バケット名&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; range(start: -30d, stop: now())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r._measurement == &amp;#34;メジャーメント名&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r[&amp;#34;_field&amp;#34;] == &amp;#34;表示したいフィールドの名前&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; aggregateWindow(every: 1d, fn: last)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ポイントは &lt;code&gt;aggregateWindow(every: 1d, fn: last)&lt;/code&gt; で、一日ごとの最後の値を取得しています。&lt;/p&gt;
&lt;p&gt;また、タイムゾーンを指定しないと UTC での終値（つまり、日本時間の9時の時点の値）が取得されてしまったので、JST を指定しました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.influxdata.com/blog/time-zones-in-flux/" target="_blank" rel="noopener"
 &gt;https://www.influxdata.com/blog/time-zones-in-flux/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;尚、私の場合はグラフではなくテーブル表示にしたかったため、グラフの表示期間に関わらず &lt;code&gt;range(start: -30d, stop: now())&lt;/code&gt; で直近30日固定表示にしています。&lt;/p&gt;
&lt;h3 id="累積グラフの作成"&gt;&lt;a href="#%e7%b4%af%e7%a9%8d%e3%82%b0%e3%83%a9%e3%83%95%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;累積グラフの作成
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;cumulativeSum&lt;/code&gt; を使います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/cloud/query-data/flux/cumulativesum/" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/cloud/query-data/flux/cumulativesum/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば、日次損益の集計を行う場合などは以下のようにするとできました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import &amp;#34;timezone&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;option location = timezone.location(name: &amp;#34;Asia/Tokyo&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from(bucket:&amp;#34;バケット名&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; range(start: -30d, stop: now())
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r._measurement == &amp;#34;メジャーメント名&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r[&amp;#34;_field&amp;#34;] == &amp;#34;表示したいフィールドの名前&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; aggregateWindow(every: 1d, fn: last)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; cumulativeSum()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一日ごとの値は取り出す方法は前述の例と同じです。&lt;br&gt;
あとはそれを &lt;code&gt;cumulativeSum()&lt;/code&gt; で加算していくだけです。&lt;br&gt;
これにより、一日ごとの値を加算してグラフに表示できます。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/aikige/items/22dc9ebc64e32a5bdfae" target="_blank" rel="noopener"
 &gt;https://qiita.com/aikige/items/22dc9ebc64e32a5bdfae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/ekzemplaro/items/f462dfc0d81329b39c09" target="_blank" rel="noopener"
 &gt;https://qiita.com/ekzemplaro/items/f462dfc0d81329b39c09&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://rabbit-note.com/2022/09/12/influxdb-2-flux/" target="_blank" rel="noopener"
 &gt;https://rabbit-note.com/2022/09/12/influxdb-2-flux/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Influxdb Cloud を使ってみた</title><link>https://blog.ponkotools.com/posts/2022/12/26/influxdb-cloud/</link><pubDate>Mon, 26 Dec 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/12/26/influxdb-cloud/</guid><description>&lt;p&gt;今までは AWS や GCP 上に InfluxDB の環境を用意して使っていたのですが、InfluxDB Cloud というクラウドサービスがあることを知ったので、使ってみました。&lt;br&gt;
バージョンも今までは v1 を使っていましたが、クラウドなので v2 に変わります。&lt;/p&gt;
&lt;h2 id="準備"&gt;&lt;a href="#%e6%ba%96%e5%82%99" class="header-anchor"&gt;&lt;/a&gt;準備
&lt;/h2&gt;&lt;h3 id="バケットの作成"&gt;&lt;a href="#%e3%83%90%e3%82%b1%e3%83%83%e3%83%88%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;バケットの作成
&lt;/h3&gt;&lt;p&gt;InfluxDB v1 系でいう、データベースとリテンションポリシーを合わせたようなものかなと思います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;サイドメニューより &lt;code&gt;Load Data&lt;/code&gt; &amp;gt; &lt;code&gt;Buckets&lt;/code&gt; を選択します。&lt;/li&gt;
&lt;li&gt;画面右側の &lt;code&gt;GENERATE BUCKET&lt;/code&gt; &amp;gt; クリックします。&lt;/li&gt;
&lt;li&gt;バケット名を入力し、必要に応じてデータの保存期間を指定します（デフォルトでは 30 日経ったら古いデータが削除されます）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="343px" data-flex-grow="143" height="454" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2022/12/26/influxdb-cloud/01.png" width="650"&gt;&lt;/p&gt;
&lt;h3 id="トークンの取得"&gt;&lt;a href="#%e3%83%88%e3%83%bc%e3%82%af%e3%83%b3%e3%81%ae%e5%8f%96%e5%be%97" class="header-anchor"&gt;&lt;/a&gt;トークンの取得
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;サイドメニューより &lt;code&gt;Load Data&lt;/code&gt; &amp;gt; &lt;code&gt;API Tokens&lt;/code&gt; を選択します。&lt;/li&gt;
&lt;li&gt;画面右側の &lt;code&gt;GENERATE API TOKEN&lt;/code&gt; &amp;gt; &lt;code&gt;All Access API Token&lt;/code&gt; を選択します。&lt;/li&gt;
&lt;li&gt;トークンが表示されるのでコピーします。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;コピーしたトークンは環境変数などに設定して使います。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="n"&gt;INFLUX_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;コピーしたトークン&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="url-の取得"&gt;&lt;a href="#url-%e3%81%ae%e5%8f%96%e5%be%97" class="header-anchor"&gt;&lt;/a&gt;URL の取得
&lt;/h3&gt;&lt;p&gt;API エンドポイントとなる URL は以下で取得できます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;画面上部のメールアドレスを選択 &amp;gt; &lt;code&gt;Settings&lt;/code&gt; をクリック&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="python-からデータを書き込む"&gt;&lt;a href="#python-%e3%81%8b%e3%82%89%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e6%9b%b8%e3%81%8d%e8%be%bc%e3%82%80" class="header-anchor"&gt;&lt;/a&gt;Python からデータを書き込む
&lt;/h2&gt;&lt;p&gt;以下の記事を参考にしてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2022/12/python-influxdb-18-influxdbclient.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2022/12/python-influxdb-18-influxdbclient.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;必要な情報はバケット名、トークン、URL です。&lt;/p&gt;
&lt;h2 id="ダッシュボードの作成"&gt;&lt;a href="#%e3%83%80%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9c%e3%83%bc%e3%83%89%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;ダッシュボードの作成
&lt;/h2&gt;&lt;p&gt;別途記事にします。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://dev.classmethod.jp/articles/send-and-visualize-data-with-influxdb-cloud/" target="_blank" rel="noopener"
 &gt;https://dev.classmethod.jp/articles/send-and-visualize-data-with-influxdb-cloud/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[Python] InfluxDB 1.8 で influxdb_client を使う</title><link>https://blog.ponkotools.com/posts/2022/12/21/influxdb-client/</link><pubDate>Wed, 21 Dec 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/12/21/influxdb-client/</guid><description>&lt;p&gt;python で InfluxDB v1 に対してデータの読み書きを行う際に、ayncio を使って非同期化したいなと思ったのですが、今使っているライブラリの InfluxDBClient は asyncio に対応していないようでした。&lt;/p&gt;
&lt;p&gt;代わりに influxdata 社の influx-client を使うと asyncio を使えそうだったのですが、こちらは基本的に InfluxDB v2 以降にのみ対応しているようで、Flux という言語にしか対応していません。&lt;br&gt;
InfluxDB v1 以前は InfluxQL という SQL に近い言語が使われていました。&lt;/p&gt;
&lt;p&gt;こちら、以下のページが参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://rabbit-note.com/2022/09/12/influxdb-2-flux/" target="_blank" rel="noopener"
 &gt;https://rabbit-note.com/2022/09/12/influxdb-2-flux/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただ、InfluxDB 1.7以降でも設定を変更することで Flux が使えるようになるそうです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/influxdata/influxdb-client-python#influxdb-1-8-api-compatibility" target="_blank" rel="noopener"
 &gt;https://github.com/influxdata/influxdb-client-python#influxdb-1-8-api-compatibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;従って、InfluxDB v1 でも Flux を有効にしたうえで、Flux でクエリを記述してデータを取得するようにすれば、asyncio を使って非同期化することができそうです。&lt;br&gt;
ちなみに、データの書き込みに関しては Flux は関係ありませんでした。&lt;/p&gt;
&lt;p&gt;以下、InfluxDB v1 の前提で書いていますが、v2 でも基本的には同じです。&lt;br&gt;
&lt;code&gt;bucket&lt;/code&gt; &lt;code&gt;token&lt;/code&gt; の指定方法が異なるだけです。&lt;/p&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;InfluxDB 1.8.10&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="flux-言語を有効化する"&gt;&lt;a href="#flux-%e8%a8%80%e8%aa%9e%e3%82%92%e6%9c%89%e5%8a%b9%e5%8c%96%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;Flux 言語を有効化する
&lt;/h2&gt;&lt;p&gt;InfluxDB を Docker で動かしていたのですが、環境変数に以下を追加するだけで OK でした。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFLUXDB_HTTP_FLUX_ENABLED=true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="サンプルコード"&gt;&lt;a href="#%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%b3%e3%83%bc%e3%83%89" class="header-anchor"&gt;&lt;/a&gt;サンプルコード
&lt;/h2&gt;&lt;h3 id="データの書き込み-write_api"&gt;&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e6%9b%b8%e3%81%8d%e8%be%bc%e3%81%bf-write_api" class="header-anchor"&gt;&lt;/a&gt;データの書き込み (write_api)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import asyncio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from influxdb_client.client.influxdb_client_async import InfluxDBClientAsync
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from influxdb_client.client.write.point import Point
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from influxdb_client.domain.write_precision import WritePrecision
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if __name__ == &amp;#39;__main__&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; async def main():
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; url = &amp;#39;http://&amp;lt;url&amp;gt;:8086&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; username = &amp;#39;username&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; password = &amp;#39;password&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dbname = &amp;#39;dbname&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rpname = &amp;#39;rpname&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # https://zeppelin.apache.org/docs/0.10.1/interpreter/influxdb.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bucket = f&amp;#39;{dbname}/{rpname}&amp;#39; # InfluxDB 1.8 では dbname/rpname がバケット名として使われる
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; token = f&amp;#39;{username}:{password}&amp;#39; # InfluxDB 1.8 では username:password がトークンとして使われる
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; org = &amp;#34;-&amp;#34; # InfluxDB 1.8 ではよくわからん
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data = []
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data.append({
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;fields&amp;#39;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;hoge&amp;#39;: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;measurement&amp;#39;: &amp;#39;measurement&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;tags&amp;#39;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;hostname&amp;#39;: &amp;#39;hostname&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; })
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; points = [ Point.from_dict(i, WritePrecision.MS) for i in data ]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; async with InfluxDBClientAsync(url=url, token=token, org=org) as client:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; write_api = client.write_api()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; successfully = await write_api.write(bucket=bucket, record=points)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(successfully)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="データの読み込み-query_api"&gt;&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf-query_api" class="header-anchor"&gt;&lt;/a&gt;データの読み込み (query_api)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import asyncio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;from influxdb_client.client.influxdb_client_async import InfluxDBClientAsync
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if __name__ == &amp;#39;__main__&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; async def main():
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; url = &amp;#39;http://&amp;lt;url&amp;gt;:8086&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; username = &amp;#39;username&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; password = &amp;#39;password&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dbname = &amp;#39;dbname&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rpname = &amp;#39;rpname&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # https://zeppelin.apache.org/docs/0.10.1/interpreter/influxdb.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bucket = f&amp;#39;{dbname}/{rpname}&amp;#39; # InfluxDB 1.8 では dbname/rpname がバケット名として使われる
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; token = f&amp;#39;{username}:{password}&amp;#39; # InfluxDB 1.8 では username:password がトークンとして使われる
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; org = &amp;#34;-&amp;#34; # InfluxDB 1.8 ではよくわからん
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; query = f&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; from(bucket: &amp;#34;{bucket}&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; range(start: -10m)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn:(r) =&amp;gt; r._measurement == &amp;#34;measurement&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; filter(fn: (r) =&amp;gt; r[&amp;#34;_field&amp;#34;] == &amp;#34;field&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; |&amp;gt; aggregateWindow(every: 1m, fn: mean, createEmpty: false)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; async with InfluxDBClientAsync(url=url, token=token, org=org) as client:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tables = await client.query_api().query(query=query)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for table in tables:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(table)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for record in table.records:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print (record.values)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; asyncio.run(main())
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Flux については以下のページが参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/riverplus/items/20456e4188a4c0f5f62d" target="_blank" rel="noopener"
 &gt;https://qiita.com/riverplus/items/20456e4188a4c0f5f62d&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://powersj.io/posts/influxdb-docker-dev/" target="_blank" rel="noopener"
 &gt;https://powersj.io/posts/influxdb-docker-dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/influxdata/influxdb-client-python#async-write-api" target="_blank" rel="noopener"
 &gt;https://github.com/influxdata/influxdb-client-python#async-write-api&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://influxdb-client.readthedocs.io/en/stable/api.html#queryapi" target="_blank" rel="noopener"
 &gt;https://influxdb-client.readthedocs.io/en/stable/api.html#queryapi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>InfluxDB のコマンド (InfluxQL)</title><link>https://blog.ponkotools.com/posts/2022/09/22/influxdb/</link><pubDate>Thu, 22 Sep 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/09/22/influxdb/</guid><description>&lt;p&gt;ちょっと何かしたいというときに毎回コマンドを調べているので、個人的によく使うコマンドをまとめてみました。&lt;/p&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04&lt;/li&gt;
&lt;li&gt;InfluxDB 1.8.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="事前知識"&gt;&lt;a href="#%e4%ba%8b%e5%89%8d%e7%9f%a5%e8%ad%98" class="header-anchor"&gt;&lt;/a&gt;事前知識
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;influx&lt;/code&gt; コマンドで DB との対話モードとなります。&lt;br&gt;
この状態でコマンドを実行していきます。&lt;br&gt;
尚、対話モードに入らずに以下のようにしてコマンドを実行することもできます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ influx -execute &lt;span class="s2"&gt;&amp;#34;コマンド&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下、対話モードになっている前提でコマンドのみ記載します。&lt;/p&gt;
&lt;h2 id="データベースの作成"&gt;&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;データベースの作成
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#create-database" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#create-database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;create database &amp;lt;データベース名&amp;gt;&lt;/code&gt; を実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; create database sampledb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="データベースの表示"&gt;&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%ae%e8%a1%a8%e7%a4%ba" class="header-anchor"&gt;&lt;/a&gt;データベースの表示
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#show-databases" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#show-databases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;show databases&lt;/code&gt; を実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; show databases
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: databases
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;----
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sampledb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;_internal
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="リテンションポリシーの作成"&gt;&lt;a href="#%e3%83%aa%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;リテンションポリシーの作成
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#create-retention-policy" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#create-retention-policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;create retention policy &amp;lt;リテンションポリシー名&amp;gt; on &amp;lt;データベース名&amp;gt;&lt;/code&gt; を実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; create retention policy samplerp on sampledb duration 30d replication &lt;span class="m"&gt;1&lt;/span&gt; default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;duration&lt;/code&gt; : 保存期間を指定
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#durations" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#durations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replication&lt;/code&gt; : でレプリケーション数を指定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;default&lt;/code&gt; : このリテンションポリシーをデフォルトにする&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="リテンションポリシーの表示"&gt;&lt;a href="#%e3%83%aa%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e3%81%ae%e8%a1%a8%e7%a4%ba" class="header-anchor"&gt;&lt;/a&gt;リテンションポリシーの表示
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#show-retention-policies" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#show-retention-policies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;use &amp;lt;データベース名&amp;gt;&lt;/code&gt; でデータベースを選択し、&lt;code&gt;show retention policies&lt;/code&gt; で表示します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; use sampledb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Using database sampledb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; show retention policies
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name duration shardGroupDuration replicaN default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---- -------- ------------------ -------- -------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;autogen 0s 168h0m0s &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;samplerp 720h0m0s 24h0m0s &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="リテンションポリシーの保存期間を変更"&gt;&lt;a href="#%e3%83%aa%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e3%81%ae%e4%bf%9d%e5%ad%98%e6%9c%9f%e9%96%93%e3%82%92%e5%a4%89%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;リテンションポリシーの保存期間を変更
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#alter-retention-policy" target="_blank" rel="noopener"
 &gt;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/#alter-retention-policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;alter retention policy &amp;lt;リテンションポリシー名&amp;gt; on &amp;lt;データベース名&amp;gt; duration &amp;lt;保存期間&amp;gt;&lt;/code&gt; を実行します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; alter retention policy samplerp on sampledb duration 180d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;show retention policies&lt;/code&gt; で変わったことを確認します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; show retention policies
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name duration shardGroupDuration replicaN default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---- -------- ------------------ -------- -------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;autogen 0s 168h0m0s &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;samplerp 4320h0m0s 24h0m0s &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>TIG Stack を動かしてみる</title><link>https://blog.ponkotools.com/posts/2022/09/16/tigstack/</link><pubDate>Fri, 16 Sep 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/09/16/tigstack/</guid><description>&lt;p&gt;サーバーリソースのメトリクスやログの収集・保存・可視化・アラートを行うためにTIG Stack (Telegraf, InfluxDB, Grafana) を使って一通り設定してみました。&lt;/p&gt;
&lt;p&gt;一応、以前にも記事は書いていますが、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2021/12/telegraf-influxdb-garafana.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2021/12/telegraf-influxdb-garafana.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ちょっと情報が古くなっていたので、アップデートし、さらに出来る限り設定を自動化しました。&lt;/p&gt;
&lt;h2 id="予備知識"&gt;&lt;a href="#%e4%ba%88%e5%82%99%e7%9f%a5%e8%ad%98" class="header-anchor"&gt;&lt;/a&gt;予備知識
&lt;/h2&gt;&lt;p&gt;時系列とは何ぞや？ TICK スタックとは何ぞや？みたいな話が以下に載ってました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.influxdata.com/blog/influxdb-the-platform-for-time-series-data/" target="_blank" rel="noopener"
 &gt;https://www.influxdata.com/blog/influxdb-the-platform-for-time-series-data/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.influxdata.com/blog/introduction-to-influxdatas-influxdb-and-tick-stack/" target="_blank" rel="noopener"
 &gt;https://www.influxdata.com/blog/introduction-to-influxdatas-influxdb-and-tick-stack/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://medium.com/yavar/influxdb-tick-stack-part1-28bd04d10a18" target="_blank" rel="noopener"
 &gt;https://medium.com/yavar/influxdb-tick-stack-part1-28bd04d10a18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.influxdata.com/integration/syslog/" target="_blank" rel="noopener"
 &gt;https://www.influxdata.com/integration/syslog/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;p&gt;TIG Stack は全て Docker で動かします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04&lt;/li&gt;
&lt;li&gt;Docker 20.10.12&lt;/li&gt;
&lt;li&gt;Telegraf 1.23.0&lt;/li&gt;
&lt;li&gt;InfluxDB 1.8.10&lt;/li&gt;
&lt;li&gt;Grafana 9.1.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="各ツールの役割"&gt;&lt;a href="#%e5%90%84%e3%83%84%e3%83%bc%e3%83%ab%e3%81%ae%e5%bd%b9%e5%89%b2" class="header-anchor"&gt;&lt;/a&gt;各ツールの役割
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ツール&lt;/th&gt;
 &lt;th style="text-align: left"&gt;役割&lt;/th&gt;
 &lt;th&gt;Docker イメージ&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Telegraf&lt;/td&gt;
 &lt;td style="text-align: left"&gt;データの収集&lt;/td&gt;
 &lt;td&gt;&lt;a class="link" href="https://hub.docker.com/_/telegraf" target="_blank" rel="noopener"
 &gt;https://hub.docker.com/_/telegraf&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;InfluxDB&lt;/td&gt;
 &lt;td style="text-align: left"&gt;データの保存（時系列データベース）&lt;/td&gt;
 &lt;td&gt;&lt;a class="link" href="https://hub.docker.com/_/influxdb" target="_blank" rel="noopener"
 &gt;https://hub.docker.com/_/influxdb&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Grafana&lt;/td&gt;
 &lt;td style="text-align: left"&gt;データの可視化（UI）&lt;/td&gt;
 &lt;td&gt;&lt;a class="link" href="https://hub.docker.com/r/grafana/grafana/" target="_blank" rel="noopener"
 &gt;https://hub.docker.com/r/grafana/grafana/&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;上記の Docker hub のページに各ツールの起動方法や設定方法などが一通り載っているので、それを参考に設定していきます。&lt;/p&gt;
&lt;h2 id="telegraf-の設定"&gt;&lt;a href="#telegraf-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;Telegraf の設定
&lt;/h2&gt;&lt;p&gt;まずは設定ファイルの雛型（デフォルトの設定ファイル）を取得します。&lt;br&gt;
Telegraf の Docker コンテナを起動し、コンテナ内から設定ファイルをホストにコピーしてきます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker run --rm telegraf telegraf config &amp;gt; telegraf.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この &lt;code&gt;telegraf.conf&lt;/code&gt; を取得したいデータに応じて編集します。&lt;br&gt;
これについてはいろいろあるので、別記事にまとめました。&lt;/p&gt;
&lt;h2 id="docker-composeyml"&gt;&lt;a href="#docker-composeyml" class="header-anchor"&gt;&lt;/a&gt;docker-compose.yml
&lt;/h2&gt;&lt;p&gt;設定ファイルが必要なのは Telegraf だけなので、ここで TIG Stack を起動する &lt;code&gt;docker-compose.yml&lt;/code&gt; のサンプルを載せます。&lt;br&gt;
前提として、&lt;code&gt;tigstack&lt;/code&gt; というネットワークを共通に使用しているので、以下のコマンドであらかじめ作成しておく必要があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker network create tigstack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以下、&lt;code&gt;docker-compose.yml&lt;/code&gt; のサンプルです。解説などは後述します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="telegraf-について"&gt;&lt;a href="#telegraf-%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" class="header-anchor"&gt;&lt;/a&gt;Telegraf について
&lt;/h3&gt;&lt;h4 id="gpu-の情報取得について"&gt;&lt;a href="#gpu-%e3%81%ae%e6%83%85%e5%a0%b1%e5%8f%96%e5%be%97%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" class="header-anchor"&gt;&lt;/a&gt;GPU の情報取得について
&lt;/h4&gt;&lt;p&gt;NVIDIA の GPU の情報を取得するために以下を指定しています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;NVIDIA_VISIBLE_DEVICES=all&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;NVIDIA_DRIVER_CAPABILITIES=all&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;reservations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;gpu]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/usr/bin/nvidia-smi:/usr/bin/nvidia-smi:ro&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これについては以下の記事を参照してください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/bin/nvidia-smi&lt;/code&gt; のパスは環境によっては異なるかもしれません。&lt;/p&gt;
&lt;h4 id="docker-の情報取得について"&gt;&lt;a href="#docker-%e3%81%ae%e6%83%85%e5%a0%b1%e5%8f%96%e5%be%97%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" class="header-anchor"&gt;&lt;/a&gt;Docker の情報取得について
&lt;/h4&gt;&lt;p&gt;Docker の情報を取得するためには &lt;code&gt;/var/run/docker.sock&lt;/code&gt; をマウントする必要があります。&lt;br&gt;
さらに Telegraf の実行ユーザーが docker.sock にアクセスできるように、&lt;code&gt;user&lt;/code&gt; を設定する必要があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${TELEGRAF_UID_GID:?}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これについては以下の記事を参照してください。&lt;/p&gt;
&lt;h4 id="ホスト名の指定"&gt;&lt;a href="#%e3%83%9b%e3%82%b9%e3%83%88%e5%90%8d%e3%81%ae%e6%8c%87%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;ホスト名の指定
&lt;/h4&gt;&lt;p&gt;Telegraf がメトリクスを InfluxDB に記録する際、ホスト名も記録されますが、Docker コンテナのホスト名はデフォルトだとランダムな値となり、このままでよくわからないので、設定します。&lt;br&gt;
ここではホストマシンと同じホスト名を指定しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hostname: ${HOSTNAME:?}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これについては以下の記事を参照してください。&lt;/p&gt;
&lt;h3 id="influxdb-について"&gt;&lt;a href="#influxdb-%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" class="header-anchor"&gt;&lt;/a&gt;InfluxDB について
&lt;/h3&gt;&lt;p&gt;初回起動時にデフォルトのリテンションポリシーを設定するために以下を指定しています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DOCKER_INFLUXDB_INIT_MODE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;setup&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;DOCKER_INFLUXDB_INIT_RETENTION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>InfluxDB のコンテナ作成時にデータベースとリテンションポリシーの作成を行う</title><link>https://blog.ponkotools.com/posts/2022/08/09/influxdb/</link><pubDate>Tue, 09 Aug 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/08/09/influxdb/</guid><description>&lt;p&gt;Docker を使って InfluxDB を動かしているのですが、データベースとリテンションポリシーをコンテナ起動時に作成できないかなと思い、調べてみたらやり方を見つけました。&lt;/p&gt;
&lt;p&gt;以下のページが参考になりました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.easydevguide.com/posts/docker_influxdb_init" target="_blank" rel="noopener"
 &gt;https://www.easydevguide.com/posts/docker_influxdb_init&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;InfluxDB: 1.8.10&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="作成方法"&gt;&lt;a href="#%e4%bd%9c%e6%88%90%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;作成方法
&lt;/h2&gt;&lt;p&gt;まず適当な名前（ここでは &lt;code&gt;setup_influxdb.sh&lt;/code&gt;）でシェルスクリプトファイルを作成し、以下のような内容で記述します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;influx -execute &lt;span class="s2"&gt;&amp;#34;CREATE DATABASE dbname&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# create retention policy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;influx -execute &lt;span class="s2"&gt;&amp;#34;CREATE RETENTION POLICY rpname ON dbname DURATION 30d REPLICATION 1 DEFAULT&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;dbname&lt;/code&gt;, &lt;code&gt;rpname&lt;/code&gt;, 保存期間などは適当に置き換えてください。&lt;/p&gt;
&lt;p&gt;これを、InfluxDB のコンテナ内の &lt;code&gt;/docker-entrypoint-initdb.d/&lt;/code&gt; に配置します。&lt;br&gt;
例えば、私の場合は docker-compse を使っているので、以下のようにマウントしました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;influxdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;influxdb:1.8.10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;influxdb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;unless-stopped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;expose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;8086&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;influxdb:/var/lib/influxdb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./setup_influxdb.sh:/docker-entrypoint-initdb.d/setup_influxdb.sh:ro&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;influxdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでコンテナ起動時にスクリプトが実行され、データベースとリテンションポリシーが作成されます。&lt;/p&gt;
&lt;h2 id="確認方法"&gt;&lt;a href="#%e7%a2%ba%e8%aa%8d%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;確認方法
&lt;/h2&gt;&lt;p&gt;まずコンテナに入ります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker &lt;span class="nb"&gt;exec&lt;/span&gt; -it influxdb bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;データベースの一覧は以下で確認できます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# influx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; show databases
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;リテンションポリシーの一覧は以下で確認できます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# influx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; use dbname
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; show retention policies
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.easydevguide.com/posts/docker_influxdb_init" target="_blank" rel="noopener"
 &gt;https://www.easydevguide.com/posts/docker_influxdb_init&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.magata.net/memo/index.php?InfluxDB%C6%FE%CC%E7" target="_blank" rel="noopener"
 &gt;https://www.magata.net/memo/index.php?InfluxDB%C6%FE%CC%E7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Telegraf が docker.sock にアクセスできない</title><link>https://blog.ponkotools.com/posts/2022/07/02/telegraf/</link><pubDate>Sat, 02 Jul 2022 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2022/07/02/telegraf/</guid><description>&lt;p&gt;Docker コンテナ内で Telegraf を動かして、Docker の情報を収集するには &lt;code&gt;/var/run/docker.sock&lt;/code&gt; をマウントする必要がありますが、それだけでは以下のように &lt;code&gt;Got permission denied&lt;/code&gt; のエラーが表示されました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;E! &lt;span class="o"&gt;[&lt;/span&gt;inputs.docker&lt;span class="o"&gt;]&lt;/span&gt; Error in plugin: Got permission denied &lt;span class="k"&gt;while&lt;/span&gt; trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get &lt;span class="s2"&gt;&amp;#34;http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info&amp;#34;&lt;/span&gt;: dial unix /var/run/docker.sock: connect: permission denied
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;E! &lt;span class="o"&gt;[&lt;/span&gt;inputs.docker&lt;span class="o"&gt;]&lt;/span&gt; Error in plugin: Got permission denied &lt;span class="k"&gt;while&lt;/span&gt; trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get &lt;span class="s2"&gt;&amp;#34;http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?filters=%7B%22status%22%3A%7B%22running%22%3Atrue%7D%7D&amp;amp;limit=0&amp;#34;&lt;/span&gt;: dial unix /var/run/docker.sock: connect: permission denied
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Telegraf の 1.20.3 以降、Telegraf の実行ユーザーは &lt;code&gt;telegraf&lt;/code&gt; という非 root ユーザーに変わったらしいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.influxdata.com/blog/docker-run-telegraf-as-non-root/" target="_blank" rel="noopener"
 &gt;https://www.influxdata.com/blog/docker-run-telegraf-as-non-root/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なので、Telegraf の実行ユーザーが docker コマンドを実行できるように、以下のように &lt;code&gt;user&lt;/code&gt; を指定する必要があるそうです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;docker&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;telegraf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stat&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%g&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="docker-compose-の場合"&gt;&lt;a href="#docker-compose-%e3%81%ae%e5%a0%b4%e5%90%88" class="header-anchor"&gt;&lt;/a&gt;docker-compose の場合
&lt;/h2&gt;&lt;p&gt;yml 内ではシェル変数を参照できないので、あらかじめ環境変数を設定しておくなど、少し工夫が必要です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TELEGRAF_UID_GID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;telegraf:&lt;span class="k"&gt;$(&lt;/span&gt;stat -c &lt;span class="s1"&gt;&amp;#39;%g&amp;#39;&lt;/span&gt; /var/run/docker.sock&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt; で環境変数を参照します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${TELEGRAF_UID_GID}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここらへんについては以下の記事が参考になると思います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kuttsun.blogspot.com/2022/06/docker-composeyml-hostname.html" target="_blank" rel="noopener"
 &gt;https://kuttsun.blogspot.com/2022/06/docker-composeyml-hostname.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.influxdata.com/blog/docker-run-telegraf-as-non-root/" target="_blank" rel="noopener"
 &gt;https://www.influxdata.com/blog/docker-run-telegraf-as-non-root/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Telegraf + InfluxDB + Garafana でサーバーリソースを可視化する</title><link>https://blog.ponkotools.com/posts/2021/12/18/telegraf-influxdb-grafana/</link><pubDate>Sat, 18 Dec 2021 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2021/12/18/telegraf-influxdb-grafana/</guid><description>&lt;p&gt;CPUやメモリなどのリソースを収集して閲覧したいなと思い、ググってみるとこの組み合わせが良さそうでした。&lt;br&gt;
Telegraf でデータを取得して InfluxDB に書き込み、Grafana で InfluxDB のデータを読み込んで可視化します。&lt;/p&gt;
&lt;p&gt;個人的に InfluxDB と Grafana は使ったことありますが、Telegraf は今回初めて使いました。&lt;/p&gt;
&lt;p&gt;尚、この３つの頭文字を取って TIG Stack と呼んでいるページもいくつか見かけました。&lt;/p&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04&lt;/li&gt;
&lt;li&gt;Docker 20.10.7&lt;/li&gt;
&lt;li&gt;Telegraf 1.20.4&lt;/li&gt;
&lt;li&gt;InfluxDB 1.8.6&lt;/li&gt;
&lt;li&gt;Grafana 7.5.7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Telegraf と Grafana は現時点の最新のバージョンですが、InfluxDB は 2.0 系ではなく 1.8.6 を使いました。&lt;br&gt;
InfluxDB 2.0 を使ったことがないのと、参考にした Telegraf の設定ファイルのサンプルが InfluxDB 2.0 ではないものばかりだったからです。&lt;/p&gt;
&lt;p&gt;また、Telegraf, InfluxDB, Grafana は全て Docker (docker-compose) を使って動かします。&lt;/p&gt;
&lt;h2 id="docker-composeyaml-のサンプル"&gt;&lt;a href="#docker-composeyaml-%e3%81%ae%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab" class="header-anchor"&gt;&lt;/a&gt;docker-compose.yaml のサンプル
&lt;/h2&gt;&lt;p&gt;以下のような &lt;code&gt;docker-compose.yaml&lt;/code&gt; を作成しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;telegraf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;telegraf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;telegraf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;always&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;telegraf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;telegraf&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;telegraf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;depends_on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;common&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;1.8&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;always&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;8086&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8086&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;influxdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;common&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;grafana&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grafana&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grafana&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;grafana&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;always&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;grafana&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;grafana&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;common&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;common&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;external&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;influxdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;grafana&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;common&lt;/code&gt; というネットワークを共通で使っているので、あらかじめ &lt;code&gt;docker network create&lt;/code&gt; で作成しておく必要があります。&lt;/p&gt;
&lt;h2 id="telegraf-の設定"&gt;&lt;a href="#telegraf-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;Telegraf の設定
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;telegraf.conf&lt;/code&gt; を作成します。&lt;/p&gt;
&lt;p&gt;以下のページにちょうど良いのがあるのでこれをそのまま使いました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/928" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/928&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;後述しますが、Grafana のダッシュボードのテンプレートもこれを使いました。&lt;br&gt;
上記の設定をコピーしたら最低限以下の設定だけ変更します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[agent]&lt;/code&gt; &amp;gt; &lt;code&gt;hostname&lt;/code&gt; にマシン名を設定
&lt;ul&gt;
&lt;li&gt;設定しないと自動で設定されますが、起動の度に変わるので設定しておいたほうがよいと思います。&lt;/li&gt;
&lt;li&gt;環境変数が使えるので、&lt;code&gt;hostname = &amp;quot;$HOSTNAME&amp;quot;&lt;/code&gt; のようにも書けます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[[outputs.influxdb]]&lt;/code&gt; &amp;gt; &lt;code&gt;urls&lt;/code&gt; を InfluxDB の URL に変更
&lt;ul&gt;
&lt;li&gt;上記の &lt;code&gt;docker-compose.yaml&lt;/code&gt; の場合、URL は &lt;code&gt;http://influxdb.common:8086&lt;/code&gt; のようにコンテナ名とネットワーク名を使っても指定できます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他は必要に応じて設定します。&lt;/p&gt;
&lt;h2 id="起動"&gt;&lt;a href="#%e8%b5%b7%e5%8b%95" class="header-anchor"&gt;&lt;/a&gt;起動
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker-compose up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;デーモン化したい場合は &lt;code&gt;-d&lt;/code&gt; を指定します。&lt;br&gt;
起動すると InfluxDB に Telegraf 用のデータベースを自動で作成してくれます。&lt;br&gt;
（データベース名は &lt;code&gt;telegraf.conf&lt;/code&gt; で設定できます。）&lt;/p&gt;
&lt;h2 id="grafana-の設定"&gt;&lt;a href="#grafana-%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;Grafana の設定
&lt;/h2&gt;&lt;p&gt;Grafana にアクセスし、ログインします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http://localhost:3000&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;初期 ID とパスワードはどちらも &lt;code&gt;admin&lt;/code&gt; です。&lt;/p&gt;
&lt;h3 id="db-の登録"&gt;&lt;a href="#db-%e3%81%ae%e7%99%bb%e9%8c%b2" class="header-anchor"&gt;&lt;/a&gt;DB の登録
&lt;/h3&gt;&lt;p&gt;Configuration &amp;gt; Data Sources &amp;gt; Add data source &amp;gt; InfluxDB を選択します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;URL&lt;/code&gt; と &lt;code&gt;Database&lt;/code&gt; の２つを設定します。&lt;br&gt;
今回の例では以下のように設定します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;URL&lt;/code&gt; に &lt;code&gt;http://influxdb.common:8086&lt;/code&gt; を設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Database&lt;/code&gt; に &lt;code&gt;telegraf_metrics&lt;/code&gt; を設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ダッシュボードの作成"&gt;&lt;a href="#%e3%83%80%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9c%e3%83%bc%e3%83%89%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;ダッシュボードの作成
&lt;/h3&gt;&lt;p&gt;Telegraf 用のテンプレートがあるので、それをインポートするのが楽です。&lt;br&gt;
テンプレートは以下のページで探せます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今回は以下のテンプレートを使いました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/928" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/928&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上記から JSON ファイルをダウンロードし、Grafana の左メニューの + ボタンからインポートします。&lt;br&gt;
インポートの際、データベースは &lt;code&gt;telegraf_metrics&lt;/code&gt; を選択します。&lt;/p&gt;
&lt;p&gt;ダッシュボードにアクセスすると以下のような画面が表示されます。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="377px" data-flex-grow="157" height="1275" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.ponkotools.com/posts/2021/12/18/telegraf-influxdb-grafana/01.webp" srcset="https://blog.ponkotools.com/posts/2021/12/18/telegraf-influxdb-grafana/01_hu_1c1df1dba5082846.webp 800w, https://blog.ponkotools.com/posts/2021/12/18/telegraf-influxdb-grafana/01_hu_a462fb49fe1c77e3.webp 1600w, https://blog.ponkotools.com/posts/2021/12/18/telegraf-influxdb-grafana/01.webp 2003w" width="2003"&gt;&lt;/p&gt;
&lt;p&gt;かっこいい画面が簡単に作成できました。&lt;/p&gt;
&lt;h2 id="リテンションポリシーの設定"&gt;&lt;a href="#%e3%83%aa%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;リテンションポリシーの設定
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;telegraf.conf&lt;/code&gt; の [[outputs.influxdb]] &amp;gt; retention_policy でリテンションポリシーを指定できますが、ここが未指定だとデフォルトの &lt;code&gt;autogen&lt;/code&gt; が使用され、データが無期限に保存されることになるので指定します。&lt;br&gt;
例えば、リテンションポリシー名に &lt;code&gt;hoge&lt;/code&gt; と指定します。&lt;/p&gt;
&lt;p&gt;この状態で動作させると、&lt;code&gt;hoge&lt;/code&gt; というリテンションポリシーが存在しないというエラーが出るので、InfluxDB のコンテナに入ってリテンションポリシーを作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker exec -it influxdb bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コンテナに入ったら以下のコマンドでリテンションポリシーを作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# influx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; CREATE RETENTION POLICY &amp;#34;リテンションポリシー名&amp;#34; ON &amp;#34;データベース名&amp;#34; DURATION &amp;#34;期間&amp;#34; REPLICATION 1 DEFAULT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例えば、今回は以下のように指定します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CREATE RETENTION POLICY &amp;#34;hoge&amp;#34; ON &amp;#34;telegraf_metrics&amp;#34; DURATION 1h REPLICATION 1 DEFAULT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記のコマンドではデータの保存期間を１時間に設定しています。&lt;/p&gt;
&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://qiita.com/sammrai/items/0c329ac7aa8b100b66a8" target="_blank" rel="noopener"
 &gt;https://qiita.com/sammrai/items/0c329ac7aa8b100b66a8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/influxdata/telegraf/blob/master/etc/telegraf.conf" target="_blank" rel="noopener"
 &gt;https://github.com/influxdata/telegraf/blob/master/etc/telegraf.conf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/grafana/dashboards/928" target="_blank" rel="noopener"
 &gt;https://grafana.com/grafana/dashboards/928&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.htkyama.org/telegraf_influxdb_grafana" target="_blank" rel="noopener"
 &gt;https://blog.htkyama.org/telegraf_influxdb_grafana&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[Python] InfluxDB への書き込みを行う</title><link>https://blog.ponkotools.com/posts/2021/06/17/python-influxdb/</link><pubDate>Thu, 17 Jun 2021 00:00:00 +0900</pubDate><guid>https://blog.ponkotools.com/posts/2021/06/17/python-influxdb/</guid><description>&lt;p&gt;Python で InfluxDB へ書き込みを行う方法です。&lt;/p&gt;
&lt;h2 id="環境"&gt;&lt;a href="#%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Windows 10&lt;/li&gt;
&lt;li&gt;Python 3.8.1&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ライブラリのインストール"&gt;&lt;a href="#%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="header-anchor"&gt;&lt;/a&gt;ライブラリのインストール
&lt;/h2&gt;&lt;p&gt;pip でライブラリをインストールします。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; pip install influxdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="サンプルコード"&gt;&lt;a href="#%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%b3%e3%83%bc%e3%83%89" class="header-anchor"&gt;&lt;/a&gt;サンプルコード
&lt;/h2&gt;&lt;p&gt;まずは &lt;code&gt;InfluxDBClient&lt;/code&gt; をインポートして、クライアントを作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;influxdb&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;InfluxDBClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# クライアントの作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;InfluxDBClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;127.0.0.1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8086&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dbname&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="db-の作成"&gt;&lt;a href="#db-%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;DB の作成
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_database&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dbname&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="リテンションポリシーの作成"&gt;&lt;a href="#%e3%83%aa%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e3%81%ae%e4%bd%9c%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;リテンションポリシーの作成
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_retention_policy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rpname&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;30d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="データの書き込み"&gt;&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e6%9b%b8%e3%81%8d%e8%be%bc%e3%81%bf" class="header-anchor"&gt;&lt;/a&gt;データの書き込み
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write_points&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;fields&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;hoge&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;hoge&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;measurement&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;piyo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;time&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;tags&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;fuga&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;fuga&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;retention_policy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;リテンションポリシー名&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="参考-url"&gt;&lt;a href="#%e5%8f%82%e8%80%83-url" class="header-anchor"&gt;&lt;/a&gt;参考 URL
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://influxdb-python.readthedocs.io/en/latest/api-documentation.html" target="_blank" rel="noopener"
 &gt;https://influxdb-python.readthedocs.io/en/latest/api-documentation.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://hassiweb-programming.blogspot.com/2018/10/how-to-use-python-library-for-influxdb.html" target="_blank" rel="noopener"
 &gt;http://hassiweb-programming.blogspot.com/2018/10/how-to-use-python-library-for-influxdb.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kapibara-sos.net/archives/705" target="_blank" rel="noopener"
 &gt;https://kapibara-sos.net/archives/705&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>