Posted at: 2018-08-24 23:23:24  Category: memo

先日、InfluxDBに一千万件ほどのデータを積んでみてとりあえず、性能の評価を簡単にしてみたのですが、
そのデータをGrafanaで可視化してみました。



Grafanaは次のページからdebパッケージを持ってきて最新のバージョン5.2.2をインストールしました。Download Grafana

前回一か月分の時系列データを積んだので、1日毎にデータの平均値をとってグラフに表示しています。
Grafanaは1つのグラフに1つのSQLが対応したかたちのなっており直感的に分かりやすくてよいです。
Posted at: 2018-08-24 22:29:58  Category: tech

はじめに

とあるシステムのサービスレベルを簡易的に監視するにあたり、
監視結果をInfluxDBに保持できないかと思い、性能を簡単ながら評価してみました。

InfluxDBに持たせるデータ

以下のようなデータを作成しました。
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=3.451899 1484204400
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=8.368283 1484204460
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=12.665589 1484204520
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=10.680409 1484204580
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=8.874597 1484204640
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=10.527997 1484204700
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=9.445048 1484204760
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=7.822433 1484204820
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=5.692134 1484204880
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=7.785507 1484204940
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=8.335701 1484205000
servicelevel,srchost=observer8,dsthost=server8,ipv=v6,transport=udp response=8.013649 1484205060
servicelevelというmeasurementを作ります。
監視元のホスト名、監視先のホスト名、ipのバージョン、トランスポート層のプロトコル、そして、応答時間の4つのtagと1つのvalueです。
今回は、8つの監視元、8つの監視先、IPv4とIPv6、tcpとudpのフルメッシュとして、
応答時間は、平均9ms、標準偏差3msとするガウス分布を用い、合計11427840レコードを作成しました。

評価環境


$ uname -a
Linux ubuntu 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ free -m
              total        used        free      shared  buff/cache   available
Mem: 2000 213 604 32 1182 1596
Swap: 974 28 946

$ cat /proc/cpuinfo
processor       : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping : 10
cpu MHz : 1992.002
cache size : 8192 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single rsb_ctxsw retpoline kaiser fsgsbase avx2 invpcid rdseed clflushopt
bugs : cpu_meltdown spectre_v1 spectre_v2
bogomips : 3984.00
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

評価結果


SQL実行時間
explain analyze select count(*) from serviceleveltotal_time: 7.263394544s
explain analyze select count(*) from servicelevel where dsthost = 'server3'total_time: 634.235707ms
explain analyze select count(*) from servicelevel where dsthost = 'server1' and ipv = 'v4' and srchost = 'observer1'total_time: 57.865086ms
explain analyze select * from servicelevel order by time desc limit 1total_time: 546.617651ms
explain analyze select * from servicelevel order by time asc limit 1total_time: 937.252518ms
explain analyze select * from servicelevel where srchost = 'observer2' order by time asc limit 1total_time: 42.419617ms
explain analyze select * from servicelevel where time >= 1483196400 order by time asc limit 1total_time: 634.494847ms
explain analyze select count(*) from servicelevel where time >= '2016-12-31T15:00:00Z'total_time: 7.18007631s
explain analyze select count(*) from servicelevel where time <= '2017-01-31T14:59:00Z'total_time: 9.67512859s
explain analyze select count(*) from servicelevel where time <= '2017-01-31T14:59:00Z' and time >= '2016-12-31T15:00:00Z'total_time: 7.206580751s
explain analyze select mean(response) from servicelevel where time <= '2017-01-31T14:59:00Z' and time >= '2016-12-31T15:00:00Z' group by time(1d)total_time: 7.823869978s
Posted at: 2018-08-11 11:13:33  Category: tech


検証の対象は mtcq.jp に設定しているlet's encryptで発行した証明書とします。
まず、サーバー証明書と中間証明書を取得します。
$ openssl s_client -connect mtcq.jp:443 -showcerts -servername mtcq.jp < /dev/null
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = mtcq.jp
verify return:1
---
Certificate chain
0 s:/CN=mtcq.jp
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIGQzCCBSugAwIBAgISBJBaaXurBnqEhF0ONls5dijxMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA3MDgxMzE5MTlaFw0x
ODEwMDYxMzE5MTlaMBIxEDAOBgNVBAMTB210Y3EuanAwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCpYPkIx0uKtE2+oLX7lDaz1c/Dl0vD8aoa9fC2LrXC
6kyd0lJQGMaNp9Mo+6fGbGx3Ap4w6d2duhdfAiioRDIpy/qH2aCaOXROfJ7zZqN/
4OFHdjq5dRZHehOKvr195isi2zD4aESoYar8BjsvCQw0ixdYRvNKefCTTl21IsmM
hVU3RBbry4VjLrrlu9nUal3k50rQZqs3SOWR1ytmUZCf4WQJXvl23GKT0slnX8cV
PYGXpwhF1vZlNwhlFar4Jn6JlWb3qUlYhzOvSd6wRQDxN84wwdxVDLyhY3QL+Yml
DEHFUlFDmu3LeyV6DM2PrPT65hkr1jCY9iaMdJTdQDK3AgMBAAGjggNZMIIDVTAO
BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG
A1UdEwEB/wQCMAAwHQYDVR0OBBYEFJ7Z/X8ZwiPebMtrQcmnSjkRdYEwMB8GA1Ud
IwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEBBGMwYTAuBggr
BgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9yZzAvBggr
BgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0Lm9yZy8wXAYD
VR0RBFUwU4IQZmlzaHN0YXQubXRjcS5qcIIMbWFpbC5tdGNxLmpwggdtdGNxLmpw
gg1zdGF0cy5tdGNxLmpwggx3aXBzLm10Y3EuanCCC3d3dy5tdGNxLmpwMIH+BgNV
HSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcC
ARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGb
VGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5
aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0
aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcv
cmVwb3NpdG9yeS8wggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgApPFGWVMg5Zbqq
UPxYB9S3b79Yeily3KTDDPTlRUf0eAAAAWR6QttqAAAEAwBHMEUCIQCKU6VSPBZ0
/lnoQunuUIr0qhf0I0/gW0zAC8w/o0CGGgIgWEV2ywCCSAJa0Ikgpd2E41RHI5TM
UOOTF/ZEvQZxJ2AAdgBVgdTCFpA2AUrqC5tXPFPwwOQ4eHAlCBcvo6odBxPTDAAA
AWR6Qtx1AAAEAwBHMEUCIF78JHMPeYmuOpCnnlZijRqYAu8kIrQQyYkc7cJ8mGXf
AiEAiN7Vg8Hj5JeWJ1ab3EehVdb8D0FwwnhYSbukDMXl8hIwDQYJKoZIhvcNAQEL
BQADggEBAAQjD67RVrH/CfdpbKcgNXD04J4trSFsFqU6i9Or+GTOCkq3kxKSvljG
gJ8XR1Aw5Bwb+1tVNVjt2YAuePw5/kdzLRAWTGLHttBNaXkTiqp9a47W4J3LFLVB
UP/FnHIqyE0UkQungEd2/kY+4Oga4arFA3K63Chq8PALXtJqvcqDmQslNJ4cMsdl
/Wb/GjFxSt8qaqA7hzCl0FPZy50Hy5Si1Zr4+Ow0YA+ilLgZj/4pL+GiE4p8BBRc
O0m+6/4qVe9cQUAvva8DXMAgbNRoZ4D6XBvnJHimbi1ijDj1TDMVnZoMGWegOmyy
ODwbH2oGMU4r0CsJ+xwwI63trdcPDP0=
-----END CERTIFICATE-----
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----
これらを server.crt、intermediate.crt として保存しておきます。
つづいて、server.crt からOCSPのアクセス先を取得します。
$ cat server.crt | openssl x509 -noout -text | grep -i ocsp
OCSP - URI:http://ocsp.int-x3.letsencrypt.org

そして、取得したURIに対してOCSPリクエストを投げます。
$ openssl ocsp   -no_nonce   -issuer intermediate.crt   -cert server.crt   -url http://ocsp.int-x3.letsencrypt.org   -text
OCSP Request Data:
Version: 1 (0x0)
Requestor List:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 7EE66AE7729AB3FCF8A220646C16A12D6071085D
Issuer Key Hash: A84A6A63047DDDBAE6D139B7A64565EFF3A8ECA1
Serial Number: 04905A697BAB067A84845D0E365B397628F1
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Produced At: Aug 10 14:19:00 2018 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 7EE66AE7729AB3FCF8A220646C16A12D6071085D
Issuer Key Hash: A84A6A63047DDDBAE6D139B7A64565EFF3A8ECA1
Serial Number: 04905A697BAB067A84845D0E365B397628F1
Cert Status: good
This Update: Aug 10 14:00:00 2018 GMT
Next Update: Aug 17 14:00:00 2018 GMT

Signature Algorithm: sha256WithRSAEncryption
22:4e:49:cc:19:8b:12:68:53:8f:ee:c5:08:87:05:ca:9a:7d:
3d:5a:5a:aa:4d:e7:a7:8b:88:80:9f:e8:e7:29:fc:5a:af:b6:
7e:b2:d2:2b:55:6b:82:6f:fa:18:c2:ce:d5:09:03:ef:a0:8d:
db:65:58:5c:6e:16:3d:8f:4c:52:b2:1c:db:55:03:cb:d3:3f:
7c:e4:38:ef:30:33:d8:b6:e9:51:3b:a9:1b:0c:d0:46:aa:80:
10:9d:e1:af:0c:97:11:2f:28:3e:4b:89:de:7e:2c:81:e3:b5:
bf:5f:0c:b9:18:87:dd:6a:a5:63:32:81:90:8f:09:aa:1b:79:
61:3e:2b:af:df:37:b1:a9:ad:ec:b2:5c:99:70:78:2f:e9:27:
a3:87:5f:22:a4:d6:92:17:83:d9:05:be:fe:dd:df:77:7f:4d:
5a:44:b1:64:a8:b2:82:ad:ce:79:0c:1b:f8:a4:41:53:0a:b4:
5b:ec:df:87:88:7c:c0:1e:38:df:9e:b2:f7:c2:a4:01:d7:db:
94:7f:f5:cf:d8:2c:d9:33:4f:c8:b6:ed:6b:38:e9:fc:c3:7c:
50:36:53:29:84:a0:90:3e:d5:19:82:b2:1a:c3:d6:8d:9f:f3:
c0:4a:9c:42:c7:2c:8e:8d:19:a0:9d:96:ce:ad:d1:1c:99:24:
2d:e0:6d:03
Response verify OK
server.crt: good
This Update: Aug 10 14:00:00 2018 GMT
Next Update: Aug 17 14:00:00 2018 GMT

Cert Statusとしてgoodが返却されました。
Posted at: 2018-08-09 09:04:44  Category: tech


InfluxDBへhttp postをすればファイルに保存した複数のレコードを
一度に挿入できますが、うまくいかなかったのでメモ。

結論からいうと、insert対象のレコードがそれぞれ一意なタイムスタンプを
持っていなかったのでうまくいっていませんでした。

インサートしようとした内容は以下.結果として、最後の一行しか書き込まれない事象が起きた。
$ cat data.txt
temperature,region=tokyo value=31.516168
temperature,region=tokyo value=28.430662
temperature,region=tokyo value=27.914824
temperature,region=tokyo value=34.814496
temperature,region=tokyo value=27.507572
temperature,region=tokyo value=29.429653
temperature,region=tokyo value=31.257767
temperature,region=tokyo value=32.952796
$ curl -XPOST --data-binary @data.txt http://localhost:8086/write?db=testdb
InfulxDBでは、プライマリキーをタイムスタンプとタグセットの集合で扱う。
上記データだと、タグセットはregion=tokyoのみ。しかもタイムスタンプは省略しているので、
全て同じタイムスタンプがInfluxDB側で採番される。
既存のプライマリキーに対するinsertは自動的にvalueが上書きされる様なので、最後の一件しか書き込まれないこととなった。
Posted at: 2018-08-09 08:30:12  Category: tech


デフォルトで8083ポートで可視化や管理等できるアプリが立ち上がると聞いていたのですが、
バージョン1.3.0からなくなったようです。8083 port not working

対象機能は、Chronografという別のプロダクトが担うようです。