Grafana: ๋ฌด๋‹จ

์— ๋งŒ๋“  2018๋…„ 02์›” 02์ผ  ยท  105์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: grafana/grafana

๋‘ ์ธ์Šคํ„ด์Šค์—์„œ ์ตœ์‹  ๋ฒ„์ „์˜ grafana๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‘ ์ธ์Šคํ„ด์Šค์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์Šน์ธ๋˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„ ์œ„ํ•ด ํ˜„์žฌ LDAP๊ฐ€ ์•„๋‹Œ ๋‚ด์žฅ db๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” influxdb์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ ๋˜๋Š” ์˜ค์ž‘๋™์ž…๋‹ˆ๊นŒ?

needs more info

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

screenshot 2018-03-08 15 09 30
Grafana v4.6.2(์ปค๋ฐ‹: 8db5f08)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉฐ ๊ฐ‘์ž๊ธฐ Unauthorized ๊ฒฝ๊ณ ๊ฐ€ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ๊ทธ๋ž˜ํ”„๋Š” emtpy์ด์ง€๋งŒ ์ผ๋ถ€๋Š” ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋จ).

์ €๋Š” Prometheus๋ฅผ DataSource๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด ์ฃผ๋กœ ๋Œ€์‹œ ๋ณด๋“œ๊ฐ€ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด ์ž์ฒด์ ์œผ๋กœ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  105 ๋Œ“๊ธ€

์ข€ ๋” ์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

  • ์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ณ„๊ฐœ์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๊นŒ?
  • ์Šน์ธ๋˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์ž‘์—…์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ๋กœ๊ทธ์•„์›ƒ๋˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํŠน์ • ์ž‘์—…๋งŒ ๋ฉ๋‹ˆ๊นŒ?

๋‹ค๋ฅธ IP/๋„๋ฉ”์ธ ์ด๋ฆ„์— ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ๋™์ผํ•˜๊ณ  ํฌํŠธ๋งŒ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๊ณ ์œ ํ•œ ์„ธ์…˜ ์ฟ ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋‚˜์—๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

- ๋ณ„๊ฐœ์˜ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.
- ์–ด๋–ค ๋™์ž‘์ด ์Šน์ธ๋˜์ง€ ์•Š์€ ๋™์ž‘์„ ์œ ๋ฐœํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๊ฑฐ๋‚˜ grafana์— ์•ก์„ธ์Šคํ•  ๋•Œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
- ๊ฐ€๋” ๋กœ๊ทธ์•„์›ƒ๋จ
-๋ณ„๋„์˜ ๋„๋ฉ”์ธ

Github๋ฅผ ํ†ตํ•œ oauth๊ฐ€ ์žˆ๋Š” Grafana 4.6.x์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒญ์„ ์ „ํ™˜ํ•˜๊ณ  Grafana๋กœ ๋Œ์•„์˜ฌ ๋•Œ ๋ฌด์ž‘์œ„๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ "์ˆ˜์ •"๋˜์ง€๋งŒ ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

screenshot 2018-03-08 15 09 30
Grafana v4.6.2(์ปค๋ฐ‹: 8db5f08)์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉฐ ๊ฐ‘์ž๊ธฐ Unauthorized ๊ฒฝ๊ณ ๊ฐ€ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ๊ทธ๋ž˜ํ”„๋Š” emtpy์ด์ง€๋งŒ ์ผ๋ถ€๋Š” ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋จ).

์ €๋Š” Prometheus๋ฅผ DataSource๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด ์ฃผ๋กœ ๋Œ€์‹œ ๋ณด๋“œ๊ฐ€ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด ์ž์ฒด์ ์œผ๋กœ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ HTTPS ๋ฐ Postgres ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๋‹จ์ผ Grafana ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—ด๋ฉด ๋ชจ๋“  ๊ทธ๋ž˜ํ”„๊ฐ€ ์–‘ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋•Œ๋•Œ๋กœ ์ดํ›„์— ์ผ๋ถ€ ๊ทธ๋ž˜ํ”„๋Š” ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ ์‹œ "์Šน์ธ๋˜์ง€ ์•Š์Œ" ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์ง€๋งŒ ๋‹ค์Œ(๋˜๋Š” ๋‹ค์Œ ๋ช‡ ๋ฒˆ์˜) ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ ๋‚ด์—์„œ ์ •์ƒ ์ƒํƒœ๋กœ ๋ณต๊ตฌ๋˜์ง€๋งŒ ๋‚˜์ค‘์— ๋‹ค์‹œ "์Šน์ธ๋˜์ง€ ์•Š์Œ" ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์—์„œ ์ด ์ž„์˜์˜ ๋™์ž‘.

๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋‹ค์Œ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

lvl=eror msg="ID๋ฅผ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ" logger=context userId=1 error="์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ"

Grafana ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

lvl=info msg="Grafana ์‹œ์ž‘" logger=์„œ๋ฒ„ ๋ฒ„์ „=5.0.4 commit=7dc36ae ์ปดํŒŒ์ผ๋จ=2018-03-28T20:52:41+0900

์ €๋Š” Firefox๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋‚  ๋™์•ˆ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—ด์–ด๋‘๊ณ  ์†๋Œ€์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‘๊ณ  ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ(Grafana๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹˜)๊ฐ€ ๋•Œ๋•Œ๋กœ ์ ˆ์ „ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

grafana 5.x์—์„œ๋Š” ๋” ์ด์ƒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ Grafana 5.0.4์—์„œ ์ด์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€๊ฐ€ ๋กœ๊ทธ์— ์—†์Šต๋‹ˆ๋‹ค(๋‹จ์ˆœํ•œ ๋กœ์ปฌ Grafana ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ).

์ €๋„ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์ œ๋Š” ๋งค์šฐ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฒ„์ „์ด ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ grafana ํŽ˜์ด์ง€๋ฅผ ์—ด๊ณ  ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‚˜๋Š” grafana(v4.3.2 (commit: ed4d170))์˜ ์ด์ „ ๋ฒ„์ „์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์˜ค๋žซ๋™์•ˆ grafana.mydomain.com ์—์„œ ์ž˜ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ €๋Š” grafana๋ฅผ v5.0.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ œ์ž๋ฆฌ์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋Œ€์‹ . ๊ฐ™์€ ๋จธ์‹ ์— ์ƒˆ Grafana๋ฅผ ์„ค์ •ํ•˜๊ณ  ์›ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ์ด์ „ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋ถ„ํ•ดํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ํ•œ ์ผ:

  1. docker๋Š” ํฌํŠธ ๋งต์ด 3005์ธ ์ด์ „ ๋จธ์‹ ๊ณผ ๋™์ผํ•œ ๋จธ์‹ ์—์„œ grafana5๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. Safari์˜ grafana.mydomain.com ์—์„œ ์ด์ „ grafana4๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค
  3. Safari์—์„œ grafana.mydomain.com:3005 ์— Grafana5 ๋ฐฉ๋ฌธ
    ์ด์ œ ๋‚ด ํ™”๋ฉด์— Grafana4 ๋ฐ Grafana5 ํƒญ์ด ๋‘ ๊ฐœ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.
  4. Grafana5์— ๋กœ๊ทธ์ธํ•˜์—ฌ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. [๋Œ€์‹œ๋ณด๋“œ ์ƒ์„ฑ]๊ณผ ๊ฐ™์€ ....
    ์ด์ œ ๋‘ Grafana ํŽ˜์ด์ง€๊ฐ€ ์ถฉ๋Œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‘ Grafana ๋ชจ๋‘ Unauthorized ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์—…๋ฐ์ดํŠธ : [ip]:3005๋กœ Grafana5๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ 3๋‹จ๊ณ„๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋™์ผํ•œ ๋„๋ฉ”์ธ ๋‚ด์—์„œ ๋‘ ๊ฐœ์˜ Grafana ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Š” ๋ฐ ์ถฉ๋Œ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@kehao95 ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ผํ•œ ๋„๋ฉ”์ธ์—์„œ ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ Grafana ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (Torkel์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค).

@ajardan ์€ ๋™์ผํ•œ ๋„๋ฉ”์ธ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์— ์žˆ์Šต๋‹ˆ๊นŒ?

@daniellee ์ €๋Š” ์‹ค์ œ๋กœ ํ•ญ์ƒ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ์กฐ์‚ฌํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ์˜ ๊ทธ๋ž˜ํ”„๋Š” 2๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์†Œ์Šค(Prometheus ๋ฐ Cloudera)์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋•Œ๋•Œ๋กœ ์ด ์ด์ƒํ•œ "์Šน์ธ๋˜์ง€ ์•Š์€" ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์ƒˆ๋กœ ๊ณ ์นจ์€ ๋ฌธ์ œ๋ฅผ "์ˆ˜์ •"ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ Docker ์ด๋ฏธ์ง€์—์„œ Grafana v5.1.0(844bdc53a)์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” InfluxDb์ž…๋‹ˆ๋‹ค. Grafana์—์„œ 2๊ฐœ์˜ ์กฐ์ง์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ '๊ด€๋ฆฌ์ž' ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

"์ฃผ์„ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šน์ธ๋˜์ง€ ์•Š์Œ"์ด๋ผ๋Š” ์ƒˆ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ด ์˜ค๋ฅ˜๊ฐ€ ํ•œ ๋ฒˆ ๋” ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

win10 x64์˜ grafana๋Š” "Unauthorized"๋ผ๋Š” ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋ฉฐ์น  ๋™์•ˆ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์ž‘์€ @dogada ์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฉฐ influxdb์™€ ํ•จ๊ป˜ v5.1.0๋„ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. grafana์™€ influxdb๋Š” ๋ชจ๋‘ ๊ฐ™์€ ์ปดํ“จํ„ฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋„์ปค์— ์žˆ๋Š” ํ•˜๋‚˜์˜ grafana 5.1 ์ธ์Šคํ„ด์Šค. ์Šน์ธ์„ ์œ„ํ•œ Google ์ธ์ฆ.

์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ™์€ ํ–‰๋™. ํ˜„์žฌ docker์—์„œ v5.0.3 ์‹คํ–‰, ๋‚ด๋ถ€ ์ธ์ฆ, ๋‹จ์ผ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž, nginx๋ฅผ ํ†ตํ•ด ํ”„๋ก์‹œ, ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” influxdb์ž…๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์น  ๋•Œ ์ž๋™์œผ๋กœ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์˜ค๋žซ๋™์•ˆ ํƒญํ•  ๋•Œ ์ฃผ๋กœ ๋ฐœ์ƒ

๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ํƒญ์„ ์—ด ๋•Œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ตœ์‹  ๋„์ปค ์ด๋ฏธ์ง€ v5.1.2(์ปค๋ฐ‹: c3c690e21)๋กœ ์—…๋ฐ์ดํŠธํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ

GitHub OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Docker์˜ Grafana 5.0.0๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. InfluxDB, CloudWatch ๋ฐ ๋‘ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ํ˜ผํ•ฉ๋œ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ด๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. (ELB ๋’ค์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค, ํ•˜๋‚˜์˜ ํฌํŠธ, HTTPS.)

์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ๊ธฐ๋ณธ "์Šน์ธ๋˜์ง€ ์•Š์Œ" ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€(๊ทธ๋ž˜ํ”„ ๋กœ๋“œ ์‹คํŒจ ํฌํ•จ)์™€ ๋•Œ๋•Œ๋กœ(๋” ๋“œ๋ฌผ๊ฒŒ๋Š”) "์ฃผ์„ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šน์ธ๋˜์ง€ ์•Š์Œ" ๋ฉ”์‹œ์ง€๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

~๋‚ด ์˜์‹ฌ์ด OAuth ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ผ๊นŒ์š”?~ ๊ฑฐ์˜ ํ™•์‹คํ•˜๊ฒŒ ์„ธ์…˜ ๋ฐฑ์—”๋“œ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ข€ ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“  ํ›„์— ์ฐพ์€ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด ๋กœ๊ทธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

t=2018-05-16T16:55:39+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"

์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ผํ•œ ์œ„์น˜๋Š” ์ด ์ฝ”๋“œ ์ค„์— ์žˆ์œผ๋ฉฐ ์ด๋Š” ์„ธ์…˜ ๋ฐ ์„ธ์…˜ ์ฟ ํ‚ค ๊ด€๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/grafana/grafana/blob/0ad63366349db8781916a731387cd5e556280633/pkg/middleware/middleware.go#L97

๊ธฐ๋ณธ file ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ์…˜์„ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ํƒ‘์žฌ๋œ EFS ๊ณต์œ ๋ฅผ ํ†ตํ•ด ์ด๊ฒƒ์ด ์ž ์žฌ์ ์ธ ํ•ฉ๋ณ‘์ฆ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ Grafana(๋‹ค๋ฅธ ํฌํŠธ์—์„œ ์‹คํ–‰)๋ฅผ ์—ด๋ ค๊ณ  ํ•  ๋•Œ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค.
์Šน์ธ๋˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋•Œ๋•Œ๋กœ ๋กœ๊ทธ์•„์›ƒ๋ฉ๋‹ˆ๋‹ค.

Failed to get user with id log ๋ฉ”์‹œ์ง€

[database]
# Set to true to log the sql calls and execution times.
log_queries = true

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

@marefr ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ํ•ญ์ƒ ๋‹ค์Œ ๋‘ ์ฟผ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT\n\t\tu.id as user_id,\n\t\tu.is_admin as is_grafana_admin,\n\t\tu.email as email,\n\t\tu.login as login,\n\t\tu.name as name,\n\t\tu.help_flags1 as help_flags1,\n\t\tu.last_seen_at as last_seen_at,\n\t\t(SELECT COUNT(*) FROM org_user where org_user.user_id = u.id) as org_count,\n\t\torg.name as org_name,\n\t\torg_user.role as org_role,\n\t\torg.id as org_id\n\t\tFROM `user` as u\n\t\tLEFT OUTER JOIN org_user on org_user.org_id = 1 and org_user.user_id = u.id\n\t\tLEFT OUTER JOIN org on org.id = org_user.org_id WHERE u.id=? []interface
UPDATE `user` SET `last_seen_at` = ? WHERE `id`=? []interface

์ „์ฒด ์˜ˆ์‹œ ๋กœ๊ทธ:

t=2018-05-30T15:59:39+0000 lvl=info msg="[SQL] SELECT\n\t\tu.id as user_id,\n\t\tu.is_admin as is_grafana_admin,\n\t\tu.email as email,\n\t\tu.login as login,\n\t\tu.name as name,\n\t\tu.help_flags1 as help_flags1,\n\t\tu.last_seen_at as last_seen_at,\n\t\t(SELECT COUNT(*) FROM org_user where org_user.user_id = u.id) as org_count,\n\t\torg.name as org_name,\n\t\torg_user.role as org_role,\n\t\torg.id as org_id\n\t\tFROM `user` as u\n\t\tLEFT OUTER JOIN org_user on org_user.org_id = 1 and org_user.user_id = u.id\n\t\tLEFT OUTER JOIN org on org.id = org_user.org_id WHERE u.id=? []interface
{}
{2} - took: 54.517418ms" logger=sqlstore.xorm
t=2018-05-30T15:59:39+0000 lvl=info msg="[SQL] UPDATE `user` SET `last_seen_at` = ? WHERE `id`=? []interface
{}
{\"2018-05-30 15:59:39\", 2} - took: 42.957209ms" logger=sqlstore.xorm
t=2018-05-30T15:59:39+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-05-30T15:59:39+0000 lvl=info msg="[SQL] SELECT\n\t\tu.id as user_id,\n\t\tu.is_admin as is_grafana_admin,\n\t\tu.email as email,\n\t\tu.login as login,\n\t\tu.name as name,\n\t\tu.help_flags1 as help_flags1,\n\t\tu.last_seen_at as last_seen_at,\n\t\t(SELECT COUNT(*) FROM org_user where org_user.user_id = u.id) as org_count,\n\t\torg.name as org_name,\n\t\torg_user.role as org_role,\n\t\torg.id as org_id\n\t\tFROM `user` as u\n\t\tLEFT OUTER JOIN org_user on org_user.org_id = 1 and org_user.user_id = u.id\n\t\tLEFT OUTER JOIN org on org.id = org_user.org_id WHERE u.id=? []interface
{}
{2} - took: 69.013955ms" logger=sqlstore.xorm
t=2018-05-30T15:59:39+0000 lvl=info msg="[SQL] UPDATE `user` SET `last_seen_at` = ? WHERE `id`=? []interface
{}
{\"2018-05-30 15:59:39\", 2} - took: 5.593997ms" logger=sqlstore.xorm
t=2018-05-30T15:59:39+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-05-30T15:59:39+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-05-30T15:59:39+0000 lvl=info msg="[SQL] UPDATE `user` SET `last_seen_at` = ? WHERE `id`=? []interface
{}
{\"2018-05-30 15:59:39\", 2} - took: 46.673ยตs" logger=sqlstore.xorm
t=2018-05-30T15:59:39+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-05-30T15:59:39+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-05-30T15:59:39+0000 lvl=info msg="[SQL] UPDATE `user` SET `last_seen_at` = ? WHERE `id`=? []interface
{}
{\"2018-05-30 15:59:39\", 2} - took: 621.538ยตs" logger=sqlstore.xorm

@bjacobel ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์— ๋”ฐ๋ฅด๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๊นŒ์ง€ ์ œ๊ณต๋˜๋Š” ์‹ค์ œ ์‚ฌ์šฉ์ž ID๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์ด์ƒํ•˜๋‹ค. ํƒ€์‚ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค lib xorm์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๊นŒ?
์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€?
์Šน์ธ๋˜์ง€ ์•Š์€ ์š”์ฒญ์œผ๋กœ ์ธํ•ด ๋ผ์šฐํ„ฐ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ชจ๋“  ์š”์ฒญ์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[server]
router_logging = true

Kubernetes์˜ 5.1.4์—์„œ๋„ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @marefr , ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ

ํ•ด๋‹น ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๊นŒ?

์ฟผ๋ฆฌ๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋กœ๋“œํ•œ ๋‹ค์Œ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์„ ๋Œ€๊ธฐํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋•Œ๋กœ๋Š” ๋Œ€์‹œ๋ณด๋“œ ์ƒˆ๋กœ ๊ณ ์นจ ๋ฒ„ํŠผ(๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ ๊ณ ์นจ ๋ฒ„ํŠผ์ด ์•„๋‹Œ Grafana์— ๋‚ด์žฅ๋œ ๋ฒ„ํŠผ)์„ ์ˆ˜๋™์œผ๋กœ ํด๋ฆญํ•˜์—ฌ ํŠธ๋ฆฌ๊ฑฐ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋” ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑ(์˜ˆ: grafana๋ฅผ ๋ฐฐ๊ฒฝ ํƒญ์— ๋‚จ๊ฒจ๋‘ )

์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋งˆ์šดํŠธ๋œ NFS(EFS) ๊ณต์œ ์˜ SQLite์ด๊ณ  ์„ธ์…˜ ์ €์žฅ์†Œ๋Š” ๊ธฐ๋ณธ(ํŒŒ์ผ)์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๋„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋’ค์— ํ•˜๋‚˜์˜ grafana ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ๊ณ  ํ•ด๋‹น ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์„ธ์…˜ ๊ณ ์ •์„ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์š”์ฒญ์œผ๋กœ ์ธํ•ด ์Šน์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šน์ธ๋˜์ง€ ์•Š์€ ์š”์ฒญ์„ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์šฐํ„ฐ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

[์ผ๋ถ€ ๋ฏผ๊ฐํ•œ ์ •๋ณด ์ˆ˜์ •]

Request URL: https://[my grafana hostname]/api/tsdb/query
Request Method: POST
Status Code: 401 
Remote Address: [my load balancer IP]:443
Referrer Policy: no-referrer-when-downgrade
:authority: [my grafana hostname]
:method: POST
:path: /api/tsdb/query
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: no-cache
content-length: 478
content-type: application/json;charset=UTF-8
cookie: _ga=GA1.2.1782868908.1520436196; __gads=ID=b1c7d78e4fd8b9fb:T=1520436200:S=ALNI_MYT2aRMJqYtHY-CkgaPWmuNtsGEtA; sailthru_hid=919b24e8c99698a8b1829b81eda7135a5956a753dd4c29265f8b45b3a11fb749fc11562ad2abbb1220b9ef37; grafana_sess=[16-char hexadecimal session string]; AWSALB=IUyH6LlTXI/TJlteL8pr838fC7nsvth7s63o5WzqOa6wsCPRpHg20vYurCrYpbIWci27fQtzQpoRxVlIc8Ud/rEPIJvqWvT21an4e9aQmZioTEAFHA3+iWv7bPHs
dnt: 1
origin: https://[my grafana hostname]
pragma: no-cache
referer: https://[my grafana hostname]/d/[dashboard path]?refresh=5m&orgId=1&from=now-1h&to=now
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
x-grafana-org-id: 1

์•ˆ๋…•ํ•˜์„ธ์š” @marefr , ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ

@bjacobel ์ด๊ฒƒ์€ ํŠน์ • ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ SQLite์˜ ๊ฐœ๋ฐœ์ž๋Š” NFS๋ฅผ ํ†ตํ•ด SQLite๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Grafana ํ”„๋กœ์„ธ์Šค๋Š” NFS ๋งˆ์šดํŠธ๋ฅผ ํ†ตํ•ด DB์— ์•ก์„ธ์Šคํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ๊ฐ•๋ ฅํ•œ ํŒŒ์ผ ์ž ๊ธˆ ์ง€์›์ด ์—†๋Š” ๋„คํŠธ์›Œํฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ๋Š” SQLite๋ฅผ ์„ธ์…˜ ์ €์žฅ์†Œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด WAL ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก grafana์—์„œ SQLite ๊ตฌ์„ฑ์„ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

GitHawk ์™€ ํ•จ๊ป˜

๋„์ปค Grafana ๋ฐ InfluxDB ์Šคํƒ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ผํŒŒ๋‚˜ v5.1.3(์ปค๋ฐ‹: 087143285)
์ธํ”Œ๋Ÿญ์ŠคDB 1.5.3

Grafana๋Š” sqlite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ ๋„์ปค ๋ณผ๋ฅจ์„ ํ†ตํ•ด ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์ด ๋กœ์ปฌ SSD๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ช‡ ๋ถ„ ์ด์ƒ ํƒญ์„ ๋– ๋‚  ๋•Œ๋งˆ๋‹ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Firefox์— ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ๋‚จ๊ฒจ๋‘๋ฉด ๋‹ค์Œ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

GET http://x.x.x.x:3000/api/datasources/proxy/1/query?db=(Redacted info)
{"message":"Unauthorized"}

๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ƒˆ๋กœ ๊ณ ์นจ์€ ์˜ค๋ฅ˜๋ฅผ ์ง€์›๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์€ "session_provider=memcahched" ๋ˆ„๋ฝ๊ณผ ๊ด€๋ จ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ๊ตฌ์„ฑ ์˜ต์…˜์€ http://docs.grafana.org/installation/configuration/#provider -config๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์—ฌ๊ธฐ์—๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋„์ปค ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

FROM grafana/grafana:5.1.0
FROM influxdb:1.5.3

untitled

์„ค์ •/๊ตฌ์„ฑ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์ด๊ฒƒ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

@torkelo ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ถ„๋ช…ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜๋Š” ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํžŒํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์„ธ์…˜ ์„ค์ •์ด HA ์„ค์ •์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š”์ง€ ๋˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ๊ณ ์ • ์„ธ์…˜์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

ํ•˜์ง€๋งŒ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ณต์ œ๋ณธ์ด ์—†๋Š” ๋™์ผํ•œ ๋ฌธ์ œ
/api/login/ping์—์„œ ๋•Œ๋•Œ๋กœ ๋ฌด์ž‘์œ„๋กœ 401 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ(5.0์ผ ์ด์ „), ext4์˜ SQLite, Kubernetes์˜ ๋‹จ์ผ ๋ณต์ œ๋ณธ. ์ตœ์‹  ๊ณต์‹ Docker ์ด๋ฏธ์ง€.

Grafana๋ฅผ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์น  ๋•Œ ์š”์ฒญ์ด ๋ฌด์ž‘์œ„๋กœ ์‹คํŒจํ•˜๊ณ  ๊ฒฐ๊ตญ ๋ชจ๋“  ์œ„์ ฏ์ด ๋ณด๊ณ ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ๋กœ๊ทธ:

t=2018-07-31T01:38:04+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-07-31T01:38:04+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-07-31T01:38:04+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="User not found"
t=2018-07-31T01:38:04+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/api/datasources/proxy/4/query status=401 remote_addr=192.168.1.72 time_ms=28 size=26 referer="REDACTED"

๋””๋ฒ„๊น…์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Grafana(๋˜๋Š” ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜) ๋ฒ„๊ทธ๋ผ๊ณ  99% ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

/cc @torkelo

SQLite ํ…Œ์ด๋ธ”์ด ์ž ๊ธด ๊ฒฝ์šฐ ์žฌ์‹œ๋„๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ๋‹ค๊ณ  95% ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋กœ์ปฌ์— ๋ฐฐํฌํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ PRํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‹ค๋ฅธ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ œ ์˜ค๋ฅ˜์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

grafana_1   | t=2018-07-31T09:23:06+0100 lvl=eror msg="Failed to get user with id" logger=context userId=1 error="User not found"
grafana_1   | t=2018-07-31T09:23:06+0100 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/api/login/ping status=401 remote_addr=192.168.33.1 time_ms=35 size=26 referer="http://192.168.33.10:3000/d/ZJ65a0Dmz/yowyow?refresh=5s&orgId=1&from=now-30d&to=now"
grafana_1   | t=2018-07-31T09:23:06+0100 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=0
grafana_1   | t=2018-07-31T09:23:06+0100 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/login/ping status=401 remote_addr=192.168.33.1 time_ms=24 size=26 referer="http://192.168.33.10:3000/d/ZJ65a0Dmz/yowyow?refresh=5s&orgId=1&from=now-30d&to=now"

๋ช‡ ๊ฐ€์ง€ ๋” ๋งŽ์€ ์‹คํŒจ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ฐค์ƒˆ ์‹คํ–‰ํ–ˆ๊ณ  ์„ธ์…˜์—๋Š” ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ORM ๋ ˆ์ด์–ด์— ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ user.go GetSignedInUser() ์— ํ•ด๋‹น ๋ ˆ์ด์–ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋Š ๋‚  ๋ฐค 1๋ถ„ ๋™์•ˆ ๋šฑ๋šฑํ•œ 50 ๊ทธ๋ž˜ํ”„ ๋Œ€์‹œ๋ณด๋“œ์— ๋ชจ๋“  ์š”์ฒญ์„ ๊ธฐ๋กํ–ˆ๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๋งค์šฐ ์ž„์˜์˜ ํŒจํ„ด์„ ๋ณด์•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ผ๋ถ€ ๋™์‹œ์„ฑ/๊ฒฝ์ฃผ ๋ฌธ์ œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ–‰ ํŒ๋…๊ธฐ์˜ ์˜ค๋ฅ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํŒŒํ•˜๋Š” ํŒจ์น˜๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค(์ด ๋ฌธ์ œ์˜ ์ฃผ์š” ํ›„๋ณด). ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋นจ๋ž๋‹ค. ์˜ค๋ฅ˜ ์ „ํŒŒ ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

t=2018-07-31T17:26:46+0000 lvl=eror msg="Failed to get user with id" logger=context userId=2 error="database table is locked"

์žฌ์‹œ๋„๋Š” SQLite ์‹คํ–‰ ๋“œ๋ผ์ด๋ฒ„์˜ ์–ด๋”˜๊ฐ€์—์„œ ์ž˜๋ชป ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข€ ๋” ์กฐ์‚ฌํ–ˆ๊ณ  ์—ฌ๊ธฐ์— ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. go-sqlite๋Š” goroutine-safe๋กœ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. SQLite๋Š” ๋‹จ์ผ "์—ฐ๊ฒฐ"์— ๋Œ€ํ•œ ๋™์‹œ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SQLite์— ๋Œ€ํ•œ ๋‹ค์ค‘ ์—ฐ๊ฒฐ์„ ์—ด๋ ค๋ฉด xorm์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด SQLite๊ฐ€ ๋™์ผํ•œ ์—ฐ๊ฒฐ์—์„œ ์ž ๊ธˆ์„ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ต์ฐฉ ์ƒํƒœ ๋˜๋Š” ์ด๋Ÿฌํ•œ ์ž ๊ธˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  SQLite ์•ก์„ธ์Šค๋ฅผ ๋‹จ์ผ ๋ฎคํ…์Šค๋กœ ๋ž˜ํ•‘ํ•˜๊ณ  ์š”์ฒญ๋‹น ์ƒˆ SQLite ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ์ด๋Ÿฌํ•œ SQLite ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ go-sqlite3์„ ํ•ดํ‚นํ•˜์—ฌ "์—ฐ๊ฒฐ"๋‹น ๋ฎคํ…์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ๋ชจ๋“  ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํŽธ์ง‘: ์ปค์„œ์—์„œ ์ฝ์„ ๋•Œ ์ž ๊ธˆ์ด ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ์˜ ์œ„ํ—˜ ์—†์ด ์ž ๊ธ€ ์ˆ˜ ์—†์Œ). ์ด๊ฒƒ์ด C ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค(SQLite๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค). ๋Š๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์–ด์จŒ๋“  PostgreSQL๋กœ ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@lorenz , ์ด ๋ฌธ์ œ๋ฅผ ํŒŒํ—ค์ณ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด sqlite ์ˆ˜์ค€์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ท€ํ•˜์˜ ํ‘œ์‹œ๋กœ ์ธํ•ด ์ธ์Šคํ„ด์Šค์˜ ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ SQLite์—์„œ Postgres๋กœ ์ด๋™ํ•˜๊ณ  ์ด์ „์— ํŒŒ์ผ ๋ฐฑ์—…์ด์—ˆ๋˜ Postgres์—๋„ ์„ธ์…˜์„ ๋ฐฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ์ •์ ์ธ ์ฆ๊ฑฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ Unauthorized ๋ฌธ์ œ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ pgloader ์‚ฌ์šฉํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์— ์„ธ์…˜์ด๋‚˜ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

"๋” ํฐ" ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๋ชจ๋‘ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” MVCC๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋Š” ํ™•์‹คํžˆ SQLite ๋ฐฑ์—”๋“œ์—๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ์ธ์ ์œผ๋กœ ํ”„๋กœ๋•์…˜ ์ธ์Šคํ„ด์Šค๋ฅผ PostgreSQL๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ๋Š” SQLite ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์™€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Grafana(Go๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—)๋Š” SQLite์—์„œ Xorm์ด ํ˜„์žฌ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์ด์ƒ์œผ๋กœ ํŠน๋ณ„ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•œ ๋™์‹œ์„ฑ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ์— ์ด๋ฏธ ๋งŽ์€ ์ž ๊ธˆ๊ณผ ์žฌ์‹œ๋„๊ฐ€ ์žˆ์ง€๋งŒ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ–‰ ํŒ๋…๊ธฐ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—(ํ˜„์žฌ ์ž ๊ธˆ ์˜ค๋ฅ˜๋ฅผ ์ž๋™์œผ๋กœ ์‚ผ์ผœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋™์ž‘์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๊ณง ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ™๋ณดํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.) ์ž ๊ธˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋” ๋งŽ์€ ์œ„์น˜์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ํ”„๋ก์‹œ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์ ์ค‘๋˜๋Š” ๊ฒƒ์€ ์—”๋“œํฌ์ธํŠธ์ผ ๋ฟ์ด๋ฉฐ ๋ฒ„๊ทธ์˜ ํ™•๋ฅ ์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๊ฐ€์žฅ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ˆ˜์ • ์‚ฌํ•ญ์—๋Š” Xorm ๋˜๋Š” go-sqlite3 ํ•ดํ‚น์ด ํ•„์š”ํ•˜๋ฉฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@lorenz ํ›Œ๋ฅญํ•œ ๋ถ„์„ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด ๊ฒฝ์šฐ 500์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๋‹จ๊ธฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ํ˜„์žฌ์™€ โ€‹โ€‹๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 401์€ ๋ธŒ๋ผ์šฐ์ €(์ตœ์†Œํ•œ Chrome)๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฌ๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์•”ํ˜ธ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์Šน์ธ๋  ๋•Œ๊นŒ์ง€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ tmpfs ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ๋นˆ๋„๋ฅผ ์ค„์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ๋•Œ๋•Œ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@kichik ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„

๋ฐฉ๊ธˆ #13007์—์„œ ์˜ค๋ฅ˜ ๋ณด๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ PRํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž ๊ธˆ ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€ ๋˜๋Š” ๊ด€๋ จ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@torkelo ๋ถ„๋ช…ํžˆ Grafana์˜ ๋ฌธ์ œ์ด๋ฏ€๋กœ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ™•์‹คํžˆ ๋‹จ์ผ ํƒญ(๋ฐ ๋‹จ์ผ ์‚ฌ์šฉ์ž)์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ sqlite3๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์ด์ „์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ช‡ ๊ฐœ์˜ ๋ฌด๊ฑฐ์šด(์งˆ์˜์ ์ธ) ํŒจ๋„์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌด๊ฑฐ์šด ํŒจ๋„ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•ด์„œ๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋น„ sqlite3 DB๋กœ ์ „ํ™˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋” ๋ฌด๊ฒ๊ณ  ๋ฐ”์œ ํŒจ๋„๋„ ๋” ๋‚˜์˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉด์„œ ๋‹จ์ผ ์‚ฌ์šฉ์ž์™€ ๋‹จ์ผ ํƒญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ์™„์ „ํ•œ ์ˆ˜์ •์„ ์œ„ํ•ด ์„ธ์…˜์„ ๋ณ„๋„์˜ db์— ์ €์žฅํ•˜๋„๋ก ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜์—ฌ mysqldb๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Grafana ๋ฒ„์ „ 5.2.3, Lb ์ˆ˜์ค€์—์„œ ๊ณ ์ •์„ฑ์„ ํ™œ์„ฑํ™”ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ sqlite๋ฅผ ๋ฐ์ดํ„ฐ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ grafana 5.2.3์—์„œ ์„ธ์…˜ ์ €์žฅ์†Œ๋กœ redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.
์•ฝ 150๊ฐœ์˜ ์กฐ์ง์ด ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์ƒˆ๋กœ ๊ณ ์นจ ์‹œ ์Šน์ธ๋˜์ง€ ์•Š์€ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜๋™ ์ƒˆ๋กœ ๊ณ ์นจ ์‹œ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ ๋กœ๊ทธ์—์„œ ์ด๊ฒƒ์„ ์–ป๊ธฐ:

t=2018-09-22T18:10:17+0000 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=0
t=2018-09-22T18:10:17+0000 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=0
t=2018-09-22T18:10:17+0000 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=0
t=2018-09-22T18:10:17+0000 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=0
t=2018-09-22T18:10:17+0000 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=1
t=2018-09-22T18:10:17+0000 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=1

์ด ๋ฌธ์ œ๋Š” mysql ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. max_idle_conn ๋ฐ conn_max_lifetime ๊ฐ’์„ ๋‚ฎ์ถ”๋ฉด ๋‹ค์‹œ๋Š” ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋„์›€์„ ๋ฐ”๋ž๋‹ˆ๋‹ค

@vishksaj @xiaochai ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฌธ์ œ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

https://github.com/oleh-ozimok/grafana/commit/b19e416549553f582dccfbcaa3f4d3f1a742a462 - ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค(ํ•ซํ”ฝ์Šค๊ฐ€ ์žˆ๋Š” ์ด๋ฏธ์ง€ docker pull olegozimok/grafana:5.3.2 )

๊ทธ๋ผํŒŒ๋‚˜ 5.3.2. HA ๊ตฌ์„ฑ: 2๊ฐœ์˜ Grafana ์ธ์Šคํ„ด์Šค, MySQL ๋ฉ”์ธ DB, ์„ธ์…˜์šฉ memcached ์ธ์Šคํ„ด์Šค 2๊ฐœ, grafana dir ๋ฐ DB๊ฐ€ NFS์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋™์ผํ•œ "์Šน์ธ๋˜์ง€ ์•Š์€" ์˜ค๋ฅ˜๊ฐ€ ํ•ญ์ƒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. DB๊ฐ€ NFS์—์„œ SQLite์˜€์„ ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค.

@dev-e์™€ ๊ฐ™์€ ๋ฌธ์ œ์ด์ง€๋งŒ ๋” ๊ฐ„๋‹จํ•œ ์„ค์ •์ž…๋‹ˆ๋‹ค. Grafana 5.3.2, ๋‹จ์ผ ์ธ์Šคํ„ด์Šค, ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์˜ InfluxDB, ๋‹จ์ผ ์กฐ์ง, ๋‹จ์ผ ์‚ฌ์šฉ์ž. ๋ฉ”์‹œ์ง€๋Š” ๋ฌด์ž‘์œ„๋กœ ๋‚˜ํƒ€๋‚˜๊ณ  ๋‹ค์Œ ํŽ˜์ด์ง€ ์ƒˆ๋กœ ๊ณ ์นจ์—์„œ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์•ˆ๊ณ ์žˆ์–ด. ๋ฌด๋‹จ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
grafana 5.3.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์ข€ ๋‚˜์•„์ง€๊ธด ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

grafana ๋กœ๊ทธ์—์„œ:
t=2018-11-19T09:55:07+0200 lvl=eror msg="id๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค." logger=context userId=1 error="์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ"
t=2018-11-19T09:55:07+0200 lvl=eror msg="id๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค" logger=context userId=1 error="์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ"
t=2018-11-19T09:55:07+0200 lvl=eror msg="id๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค." logger=context userId=1 error="์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ"

๊ธฐ๋ณธ ์„ค์ •:
grafana/ํ˜„์žฌ 5.3.4 amd64
influxdb/ํ˜„์žฌ 1.6.0-1 amd64

๋™์ผํ•œ ๋ฌธ์ œ:

t=2018-12-03T09:28:21+0000 lvl=eror msg="Failed to update last_seen_at" logger=context userId=12 orgId=1 uname=ht error="database table is locked"
t=2018-12-03T10:02:03+0000 lvl=eror msg="Failed to get user with id" logger=context userId=12 error="User not found"
t=2018-12-03T10:02:03+0000 lvl=eror msg="Failed to get user with id" logger=context userId=12 error="User not found"
t=2018-12-03T10:02:03+0000 lvl=eror msg="Failed to get user with id" logger=context userId=12 error="User not found"
t=2018-12-03T10:02:03+0000 lvl=eror msg="Failed to get user with id" logger=context userId=12 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:46:54+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
2018/12/03 10:51:54 http: proxy error: unexpected EOF
2018/12/03 10:51:54 http: proxy error: unexpected EOF
2018/12/03 10:51:54 http: proxy error: unexpected EOF
t=2018-12-03T10:51:55+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:51:55+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:51:55+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:51:55+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:51:56+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:51:56+0000 lvl=eror msg="Failed to get user with id" logger=context userId=3 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"
t=2018-12-03T10:52:25+0000 lvl=eror msg="Failed to get user with id" logger=context userId=17 error="User not found"

๋‹จ์ผ Grafana 5.3.4, ์Šคํ† ๋ฆฌ์ง€๋Š” Amazon EFS ํŒŒ์ผ ์‹œ์Šคํ…œ(NFS ๋งˆ์šดํŠธ)
์„ธ์…˜์€ ํŒŒ์ผ๋กœ ์„ค์ •๋˜๊ณ  ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€๋Š” sqlite( /var/lib/grafana/grafana.db )์ž…๋‹ˆ๋‹ค.
Grafana๋Š” HTTPS ์ข…๋ฃŒ LB ๋’ค์— ์žˆ์Šต๋‹ˆ๋‹ค.

@oleh-ozimok ์ œ์•ˆ์„ ๊ตฌํ˜„ํ•˜๋Š” PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”. ๋‚˜๋Š” ์žฅ๊ธฐ ์‹คํ–‰ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํœด๊ฐ€์—์„œ ์ง‘์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค :)

@oleh-ozimok PR์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋‚ด ๋Œ€์‹ ์— PR์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ํฌ๋ ˆ๋”ง์„ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Btw ๋ฉ‹์ง„ ์ž‘ํ’ˆ @lorenz !

์ด๋Š” ๋ฐฐํฌ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. HA/๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋‘ ๊ฐœ์˜ Amazon Auora MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 401 Unauthorized ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜์ด ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋‘์— ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ์…˜์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ธ์ฆ๋˜๋Š” ๋ฐ ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Oauth ์„ค์ •๊ณผ ํ•จ๊ป˜ ๋” ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑ๋œ Oauth ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜๊ณ  ๋ฆฌ๋””๋ ‰์…˜๋˜๋ฉด ๋กœ๊ทธ์ธ์— ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ 2~3๋ฒˆ ๋กœ๊ทธ์ธํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋กœ๊ทธ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์„ธ์…˜ ์ €์žฅ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  v6์—์„œ ๋กœ๊ทธ์ธ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์™„์ „ํžˆ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@buroa 6.0-beta1์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ธ์ฆ ํ† ํฐ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์„ธ์…˜ ํ† ํฐ ์‚ฌ์šฉ(auth_proxy๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋จ)์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์˜ ๋Œ€๋ถ€๋ถ„์ด ์‚ฌ๋ผ์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@bergquist ๋Š” 2019-02-01T09:58:20+0200์— ๋‚ด ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฉฐ ์ง€๊ธˆ์€ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@buroa 6.0-beta1์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ธ์ฆ ํ† ํฐ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์„ธ์…˜ ํ† ํฐ ์‚ฌ์šฉ(auth_proxy๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋จ)์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์˜ ๋Œ€๋ถ€๋ถ„์ด ์‚ฌ๋ผ์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ตœ์‹  ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/buroa/grafana/tree/us-iso-regions

ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@buroa ์˜ˆ, ํ•˜์ง€๋งŒ 6.0-beta1 ์ดํ›„ ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ๋งˆ์Šคํ„ฐ์—์„œ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค
t=2019-02-08T10:05:58+0200 lvl=info msg="์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์กฐํšŒ ์‹คํŒจ" logger=context error="์‚ฌ์šฉ์ž ์ธ์ฆ ํ† ํฐ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ"
๋ธŒ๋ผ์šฐ์ € ํƒญ์ด ๋‹ซํžˆ์ง€ ์•Š๊ณ  ๋งค์‹œ๊ฐ„ ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜์—ˆ์ง€๋งŒ PC๋Š” ์ž ๊ฒจ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@QuantumProjects ๋Š” Grafana v6.0-pre์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Grafana ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์šฉ ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ผํŒŒ๋‚˜ ๋ฒ„์ „? ์—ฌ๋Ÿฌ Grafana ์ธ์Šคํ„ด์Šค? ์ธ์ฆ ์œ ํ˜•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ? ๊ฐ์‚ฌ ํ•ด์š”

@marefr ์˜ค์ผ€์ด

@marefr ๋™์ผํ•œ "์Šน์ธ๋˜์ง€ ์•Š์€"ํŒ์—…์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‚ด ์„ค์ •์ด ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • grafana ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ญ ํ”„๋ก์‹œ๋กœ
  • Grafana v5.4.3์ด ์žˆ๋Š” ๋กœ์ปฌ ์„œ๋ฒ„
  • ๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” ๋™์ผํ•œ ๋กœ์ปฌ ์„œ๋ฒ„์˜ influxdb v1.7.8์ž…๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ์˜ ์ธ์ฆ ์œ ํ˜•์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚œ ๊ทธ๋ƒฅ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธ

์ฐธ๊ณ : ๋ชจ๋“  ์„œ๋น„์Šค๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ, traefik x64, grafana ๋ฐ influxdb arm32v7์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Grafana 6.0.0(์ปค๋ฐ‹: 34a9a62, ๋ถ„๊ธฐ: HEAD)์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ Grafana๋Š” nginx ์—ญ ํ”„๋ก์‹œ ๋’ค์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. LDAP ์ธ์ฆ์ด ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด VM์—์„œ ๋‹จ์ผ Grafana ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์‹œ ๋กœ๊ทธ ํ•ญ๋ชฉ:

t=2019-03-06T13:39:24+0100 lvl=eror msg="failed to look up user based on cookie" logger=context error="database is locked"

๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด db๋ฅผ sqlite์—์„œ postgres๋กœ ์ด๋™ํ•œ ํ›„ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ด ์ƒ๋‹นํžˆ ๋ถˆํŽธํ•  ์ •๋„๋กœ ์ž์ฃผ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. Google oauth๋กœ ๋‹จ์ผ 5.4.3 ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

postgres์— ์—ฐ๊ฒฐ๋œ 5.4.3์—์„œ ๋‚˜์—๊ฒŒ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋‹นํžˆ ๋ฌด์ž‘์œ„์ด์ง€๋งŒ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์„ ํ—ˆ์šฉํ•  ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ Grafana์™€ ๋™์ผํ•œ ์ƒ์ž์— ์žˆ๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

"Unauthorized"๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ syslog์—์„œ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

...
...
grafana-server[12619]: t=2019-03-06T22:42:02+0100 lvl=info msg="Database table locked, sleeping then retrying" logger=sqlstore retry=0
grafana-server[12619]: t=2019-03-06T22:42:03+0100 lvl=eror msg="Failed to get user with id" logger=context userId=1 error="User not found"
...
grafana-server[12619]: t=2019-03-06T22:42:03+0100 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=POST path=/api/tsdb/query status=401 remote_addr=192.168.0.2 time_ms=17 size=26 referer="http://192.168.0.1:3000/d/.....
...

userId=1 ๋˜๋Š” 0 ๋ฐ retry=1 ๋˜๋Š” 0์— ๋Œ€ํ•œ ๋กœ๊ทธ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณ€ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,

๋‚˜๋Š” ์˜ค๋Š˜ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋ฉฐ์น  ์ „์— ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ์ผ๋ฐ˜ Debian Stretch์— Grafana 6.0.1์ด ์žˆ์Šต๋‹ˆ๋‹ค. Grafana๋Š” MariaDB 10.2(Galera ํด๋Ÿฌ์Šคํ„ฐ)๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(proxysql)์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค(3๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๋™๊ธฐํ™” ๋ชจ๋“œ).
์ธ์ฆ์œผ๋กœ LDAP(Windows AD)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ๋ฉ”์‹œ์ง€:

lvl=eror msg="failed to look up user based on cookie" logger=context error="invalid connection"

์ž‘๋™ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์•„๋‹Œ ์ง์ ‘ IP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์•„๋‹Œ ์ง์ ‘ IP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ฌธ์ œ๋Š” ๊ฐ„ํ—์ ์ด๋ฏ€๋กœ ๊ฐ™์€ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ญ ๊ฐœ๋งˆ๋‹ค ์ƒˆ๋กœ ๊ณ ์นจ ์ค‘ ํ•˜๋‚˜์˜ ํŒจ๋„์ด ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

6.0.2์—์„œ ๊ฐ™์€ ์ผ์ด ๋‚˜์—๊ฒŒ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ์—์„œ:
t=2019-03-23T12:04:22+0000 lvl=eror msg="failed to look up user based on cookie" logger=context error="database is locked"
๊ทธ๋ฆฌ๊ณ 
t=2019-03-23T19:05:45+0000 lvl=eror msg="Failed to update last_seen_at" logger=context userId=1 orgId=1 uname=<username> error="database is locked"

์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋ฅผ ์œ„ํ•ด Traefik๊ณผ ํ•จ๊ป˜ ์ผ๋ฐ˜ ๋„์ปค๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ๋„ ๋˜‘๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์–ด
๋ฒ„์ „ 6.02
"์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์กฐํšŒ ์‹คํŒจ" logger=context error="๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž ๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค"

Sqlite(๊ธฐ๋ณธ๊ฐ’)๋กœ "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž ๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค"๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋” ๋งŽ์€ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ mysql/postgres๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@bergquist ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ MariaDB๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ๊ณ  ๋” ์ด์ƒ Grafana์—์„œ ์ซ“๊ฒจ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์••์ •!

@bergquist ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ MariaDB๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ๊ณ  ๋” ์ด์ƒ Grafana์—์„œ ์ซ“๊ฒจ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์••์ •!

๋ช…ํ™•ํžˆ ํ•˜์ž๋ฉด "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์ด ์ž ๊ฒจ ์žˆ์Œ"์ด ์•„๋‹ˆ๋ผ "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž ๊ฒจ ์žˆ์Œ"์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” PostgreSQL์„ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ "ํ…Œ์ด๋ธ” ์ž ๊ธˆ"์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ Postgres 9.6(9.4์—์„œ)์œผ๋กœ ๋ฐ๋ ค๊ฐ„ Raspbian ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Grafana๋Š” ์—ฌ์ „ํžˆ 5.4.3์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ Postgres 9.6(9.4์—์„œ)์œผ๋กœ ๋ฐ๋ ค๊ฐ„ Raspbian ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Grafana๋Š” ์—ฌ์ „ํžˆ 5.4.3์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ๋ง์€ ์žŠ์–ด๋ผ...๋‹ค์‹œ ๋Œ์•„์™”๋‹ค. ๋œ ์ž์ฃผ, ๋‚˜๋Š” ๋งํ•˜๊ณ  ์‹ถ์ง€๋งŒ ... ์—ฌ์ „ํžˆ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ggggh ์–ด๋–ค ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ฐ‘์ž๊ธฐ ์ผ์–ด๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค!

@ggggh ์–ด๋–ค ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ฐ‘์ž๊ธฐ ์ผ์–ด๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค!

์•„๋ฌด๊ฒƒ๋„...! Postgres ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋กœ ์ง€์›Œ์กŒ๊ณ , ๋งค์ผ ๋” ์ž์ฃผ ๋‹ค์‹œ ๋Œ์•„์˜ฌ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ggggh ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
๋‚˜๋Š” Postgres๋กœ ์ „ํ™˜ํ–ˆ์ง€๋งŒ ๊ทธ๊ฒƒ๋„ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :(

Grafana 6.2.1 ๋ฐ Postgress 11์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ JSON์—์„œ ๋กœ๋“œํ•œ ๋‹ค์Œ ์•ก์„ธ์Šค๋ฅผ ์‹œ๋„ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ์ œ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด PG์—๋Š” ์ œํ•œ๋œ ์ˆ˜์˜ ์—ฐ๊ฒฐ์ด ์žˆ์—ˆ๊ณ  grafana์—์„œ max_open_conn ์ด ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์„ค์ •ํ•œ ํ›„์—๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Grafana 6.1.6 ๋ฐ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋˜๋Š” SQLite DB์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” Grafana๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์„ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค. max_open_conn ๋ณ€๊ฒฝ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Postgres์˜ ์ˆ˜์ • ์‚ฌํ•ญ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ).

์ด๊ฒƒ์˜ ๊ทผ๋ณธ ์›์ธ์€ grafana์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ธ์ฆํ•  ๋•Œ ๊ธฐ๋ณธ DB๋ฅผ ์ธ์ฆํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. SQLite๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
SQLite ์ž ๊ธˆ ์ดํ›„๋กœ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉฐ ๋™์‹œ ์‚ฌ์šฉ ํšŸ์ˆ˜๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๊ณต๊ฒฉ์ ์œผ๋กœ. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‹ค์ œ RDBMS๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(๋‚˜๋Š” postgres๋ฅผ ์ข‹์•„ํ•จ)
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์— ๊ฑธ๋ฆฌ๋ฉด ๋‹ค์‹œ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ ์ œํ•œ(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ) ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๋Š” DB์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ณด๋‹ค
๊ทธ๋ผํŒŒ๋‚˜ ๊ฑฑ์ •. ๋ฐ๋ชจ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์šฉ๋„๋กœ Grafana๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
์‹ค์ œ DB๋กœ ๋ฐฑ์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น DB๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2019๋…„ 6์›” 10์ผ ์›”์š”์ผ ์˜ค์ „ 11์‹œ 20๋ถ„ syardumian-chc [email protected]
์ผ๋‹ค:

Grafana 6.1.6 ๋ฐ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋˜๋Š” SQLite DB์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ
๋ฌธ์ œ๋Š” Grafana๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์„ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค. ๋ฐ”๊พธ๋‹ค
max_open_conn์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Postgres์— ๋Œ€ํ•œ ์ˆ˜์ •).

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/grafana/grafana/issues/10727?email_source=notifications&email_token=AAAK6YSUDLXPF2E4436CEOTPZ2EMFA5CNFSM4EO23EH2YY3PNVWWK3TUL52HS4DFVEXG43VMVBW63
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAAK6YQLR3FSCNEQR7SNEKLPZ2EMFANCNFSM4EO23EHQ
.

์—ฐ๊ฒฐ ์ œํ•œ๊ณผ ์ตœ๋Œ€ ์œ ํœด ์—ฐ๊ฒฐ์„ ๋Š˜๋ ธ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž ์‹œ ์—ด๋ ค ์žˆ๋˜ ๋Œ€์‹œ๋ณด๋“œ๋Š” ์ƒˆ๋กœ ๊ณ ์นจ ์†๋„๊ฐ€ ์ ์  ๋Š๋ ค์ง€๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ, ๊ฐ ํŒจ๋„์— loading-gif๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๊ฐ ํŒจ๋„์˜ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒœ์ฒœํžˆ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ๋‹ซ๊ณ  ์ƒˆ ์ฐฝ์„ ์—ด์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹๋” ๋ณต์žกํ•ด์ง„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋กœ๋“œํ•˜๋ฉด "๊ณ ์ •"๋˜๋Š” ์ด์œ ๊ฐ€ ์„ค๋ช…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋„ ๋žœ๋ค ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ •๋ง๋กœ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์•„ ๋ณด์ด์ง€๋งŒ kubeneters ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "์ฃผ์„ ์ฟผ๋ฆฌ ์‹คํŒจ"๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

FWIW, ์ตœ๊ทผ์— ๋‚ด ์ˆ˜์‹  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ Fabio(Traefik์—์„œ)๋กœ ์ „ํ™˜ํ•˜๊ณ  Grafana(Docker ์ด๋ฏธ์ง€, ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—”๋“œ ์—†์Œ)๋ฅผ v6.4.2๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฉฐ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ(๊ฐ„๊ฒฉ์„ 10์œผ๋กœ ์„ค์ •)์„ ์ˆ˜ํ–‰ํ•  ๋•Œ 401 ์Šน์ธ๋˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ดˆ, ํ•˜๋ฃจ ์ข…์ผ ์‹คํ–‰). Fabio๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. Grafana์˜ ์ตœ์‹  ๋ฒ„์ „์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๊ณ  ์ถ”์ธกํ•˜์ง€๋งŒ 100% ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์ƒˆ๋กœ์šด ๋ณด๊ณ ์„œ๊ฐ€ ์—†์–ด ๋‹ซ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

์ตœ๊ทผ์— ๋‚ด kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— grafana๋ฅผ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๋„์ปค ์ด๋ฏธ์ง€ grafana/ grafana:6.4.3์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ํฌ๋“œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฅ๋ฏธ๋กœ์šด ์ž‘์€ ์ •๋ณด๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

t=2019-11-01T15:18:33+0000 lvl=info msg="Successful Login" logger=http.server User=--snip--
t=2019-11-01T15:19:09+0000 lvl=eror msg="Failed to look up user based on cookie" logger=context error="dial tcp: lookup postgres.databases.svc.cluster.local: no such host"
t=2019-11-01T15:19:09+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/api/datasources/proxy/1/query status=401 remote_addr=--snip-- time_ms=11 size=26 referer="https://--snip--/d/TuobtjoZz/--snip--?orgId=1&refresh=5s&from=now-12h&to=now"

DNS ๋ฌธ์ œ๋Š” ๋‚ด ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์ด์ „์— ๋ฐœ์ƒํ•œ ๊ฒƒ์ด ์•„๋‹ˆ์ง€๋งŒ ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ • ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/issues/30215

๋งŽ์€ docker ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ grafana๊ฐ€ ์•ŒํŒŒ์ธ ์ด๋ฏธ์ง€์™€ ๋น„ ์•ŒํŒŒ์ธ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊ทธ๋ฅผ ๋•๋Š” ๋ฐ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ์œผ๋ฉด ์š”์ฒญํ•œ ๋Œ€๋กœ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์•ŒํŒŒ์ธ ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ 6.3.6์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ๋ฌธ์ œ๊ฐ€ ์™„์ „ํžˆ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‘ ๊ฐœ์˜ ๋ณ„๋„ Grafana(์ปจํ…Œ์ด๋„ˆ)๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ์— ๋กœ๊ทธ์ธํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ์— ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ์— ๋กœ๊ทธ์ธํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ์— ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค ๋กœ๊ทธ์ธ์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
๋‚ด๊ฐ€ ์ฐพ์€ ํ•ด๊ฒฐ์ฑ…์€ Grafana default.ini ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
login_cookie_name = grafana_session
์—๊ฒŒ
๋กœ๊ทธ์ธ_์ฟ ํ‚ค_์ด๋ฆ„ = grafana_session_1
์ปจํ…Œ์ด๋„ˆ์™€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ด์ œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ง€๊ธˆ์€ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@ikkerens ๋Š” ์šฐ๋ถ„ํˆฌ ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ 6.6.2-ununtu

@n0-bs ์ฃ„์†กํ•˜์ง€๋งŒ Grafana์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ MySQL ๋˜๋Š” Postgres๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MySQL ๋˜๋Š” Postgres๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ Grafana ์ธ์Šคํ„ด์Šค๋ฅผ ์—ด ๋•Œ ์ฟ ํ‚ค ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. HA ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋™์ผํ•œ ์„œ๋ฒ„์— ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ Grafana ์ธ์Šคํ„ด์Šค(์ปจํ…Œ์ด๋„ˆ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” 6.7.2์—์„œ ์ด๊ฒƒ์„ ์•„์ง๋„ ๋ณด๊ณ  ์žˆ๋‹ค. 6.5์—์„œ 6.6์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ๋‹ค์Œ 6.7๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. PostgreSQL๊ณผ ํ•จ๊ป˜ docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 6.7.2 ์ด๋ฏธ์ง€๋ฅผ ์‹œ๋„ํ•œ ๋‹ค์Œ 6.7.2-ubuntu๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋กœ๊ทธ์— ๋‚˜ํƒ€๋‚˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
lvl=eror msg="Failed to look up user based on cookie" logger=context error="pq: remaining connection slots are reserved for non-replication superuser connections"

postgres๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ (์ ์–ด๋„ ์ง€๊ธˆ์€) ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ Grafana๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์•ก์„ธ์Šคํ•  ๋•Œ๋งˆ๋‹ค ์Šน์ธ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ Grafana๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 3๊ฐœ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ 3๊ฐœ์˜ ๋‹ค๋ฅธ ํฌ๋“œ์— ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@emzfuu ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. mysql/postgres

@bergquist ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹จ์ผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šค๋˜๋Š” 3๊ฐœ์˜ ๋‹ค๋ฅธ Grafana(๋…๋ฆฝ ์‹คํ–‰ํ˜•)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์˜ ๋‚ด ์งˆ๋ฌธ์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. 3 Grafana์—๋Š” ์ž์ฒด db(sqlite3)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ก์„ธ์Šคํ•  ๋•Œ๋งˆ๋‹ค ์Šน์ธ๋˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. nfs๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰