Grafana: 許可されていない

作成日 2018年02月02日  ·  105コメント  ·  ソース: grafana/grafana

2つのインスタンスで最新バージョンのgrafanaを実行していますが、両方のインスタンスにアクセスしようとすると、多くの不正なエラーが発生します。 認証には、現在、LDAPを使用せずに組み込みのデータベースを使用しています。 データソースはinfluxdbです。

これは既知のバグまたは不正行為ですか?

needs more info

最も参考になるコメント

screenshot 2018-03-08 15 09 30
Grafana v4.6.2(commit:8db5f08)でも同じ問題が発生し、すべてが期待どおりに機能し、突然、許可されていない警告が表示されます(一部のグラフは空ですが、一部は正常に表示されます)。

私はデータソースとしてPrometheusを使用しています。

また、これは主にダッシュボードが自動更新されたときに発生すると思いますが、手動で更新すると自動的に修正されます。

全てのコメント105件

詳細を教えてください。

  • これらの2つの別々のインスタンスですか?
  • 不正なエラーを引き起こすアクションは何ですか?
  • ログアウトしているのですか、それとも機能しないのは特定のアクションだけですか?

それらは異なるIP /ドメイン名で設定されていますか? ドメイン名が同じでポートによってのみ異なる場合は、一意のセッションCookieが必要であり、Cookieを覚えておく必要があります

-それらは別々のインスタンスです
-どのアクションが不正をトリガーするのかわかりません。グラフを見たとき、またはgrafanaにアクセスしたときに発生します。
-時々ログアウトします
-個別のドメイン

Grafana4.6.xでGithubを介してoauthを使用してこれに遭遇しています。 タブを切り替えてGrafanaに戻ると、一見ランダムに見えます。 更新すると問題が「修正」されますが、後で戻ってくることがあります。

screenshot 2018-03-08 15 09 30
Grafana v4.6.2(commit:8db5f08)でも同じ問題が発生し、すべてが期待どおりに機能し、突然、許可されていない警告が表示されます(一部のグラフは空ですが、一部は正常に表示されます)。

私はデータソースとしてPrometheusを使用しています。

また、これは主にダッシュボードが自動更新されたときに発生すると思いますが、手動で更新すると自動的に修正されます。

ここでも同様の問題がありますが、HTTPSを使用する単一のGrafanaインスタンスとPostgresデータソースがあります。

ダッシュボードを開くと、すべてのグラフが良好です。 しかし、その後、一部のグラフは自動更新時に「未承認」エラーを表示し始めますが、次の(または次の数回の)自動更新内で通常の状態に回復しますが、後で再び「未承認」状態になり、繰り返します自動更新ごとのこのランダムな動作。

関連しているかどうかはわかりませんが、次のログメッセージが見つかりました。

lvl = eror msg = "IDを持つユーザーの取得に失敗しました" logger = context userId = 1 error = "ユーザーが見つかりません"

Grafanaのバージョンは次のとおりです。

lvl = info msg = "Starting Grafana" logger = server version = 5.0.4 commit = 7dc36aecompiled = 2018-03-28T20:52:41 + 0900

私はFirefoxを使用していますが、通常、ダッシュボードを何日も開いたままにして、クライアントマシン(Grafanaをホストしているサーバーマシンではない)をスリープモードにします。

これは、grafana5.xではもう発生していません。

Grafana 5.0.4でもまったく同じ問題が発生し、ユーザーの同じメッセージがログに見つかりません(これは単純なローカルGrafanaユーザーの場合です)。

私もこの問題を抱えています。 そして、この問題は非常に興味深いものです。 同じブラウザでバージョンの異なる2つの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の2つのタブが開きました。
  4. Grafana5にログインし、いくつかの操作を実行しようとしています.... [ダッシュボードの作成]のように
    両方のGrafanaページがクラッシュしました

両方のGrafanaはUnauthorizedエラーを受け取り、データポイントを取得しません


更新:[ip]:3005でGrafana5にアクセスして、ステップ3を変更しました。 今のところ正常に動作します。
同じドメイン内で2つのGrafanaページを開くときに競合が発生する可能性があるようです。

@ kehao95同じブラウザで、同じドメインで異なるポートを持つ2つのGrafanaインスタンスを開くユースケースはサポートされていません。 (Torkelは上記のことを述べました)。

@ajardanは、同じドメインにあるインスタンスですか、それとも異なるドメインにありますか?

@daniellee私は実際には常に1つのインスタンスしか使用してい

また、この奇妙な「無許可」の問題も時々発生します。 ページの更新により、問題が「修正」されます。 公式のDockerイメージからGrafanav5.1.0(844bdc53a)を実行します。 データソースはInfluxDbです。 Grafanaで2つの組織を作成しましたが、実際には1つしか使用していません。 単一の「admin」ユーザー。

「注釈クエリが失敗しました。許可されていません」という新しいエラーメッセージが表示され、このエラーがもう一度発生しました。

win10 x64の私のグラファナは、「無許可」という警告が表示されるまで、数日間は完全に正常に機能していました。 動作は@dogadaで説明されている

同じ問題。 Docker内の1つのgrafana5.1インスタンス。 承認のためのGoogleOAuth。

更新はありますか?

同じ動作。 現在、Docker、内部認証、単一の管理者ユーザーでv5.0.3を実行しており、nginxを介してプロキシされ、データソースはinfluxdbです。 データを自動更新すると、ダッシュボードは自動的に修正されます。 ほとんどの場合、バックグラウンドで長時間タブを押すと発生します

同じインスタンスに対して2つのタブを開いたときに見られる同じ問題。

最新のDockerイメージv5.1.2(コミット:c3c690e21)に更新しても、問題は修正されません

GitHubOAuthを使用したDockerのGrafana5.0.0でも同じ問題があると思います。 InfluxDB、CloudWatch、および両方のデータソースが混在するダッシュボードで見たことがあります。 (ELBの背後にある1つのインスタンス、1つのポート、HTTPS。)

このスレッドの他のスレッドと同様に、自動更新によってトリガーされ、ページの再読み込み後に消えるのがわかります。 基本的な「Unauthorized」エラーメッセージ(グラフの読み込みに失敗する)が表示される場合と、(まれに)「Annotationqueryfailed。Unauthorized」メッセージが表示される場合があります。

〜私の疑いは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"

このようなエラーがスローされるのは、このコード行だけです。これは、セッションとセッションCookieの管理に関連しているようです。

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

デフォルトのfileバックエンドを使用してセッションを保存していますが、マウントされたEFS共有を介して、それが潜在的な問題であるかどうか疑問に思います。

同じブラウザで2つの異なるGrafana(異なるポートで実行されている)を開こうとすると、この問題に直面しました。
不正なエラーが発生し、ログアウトすることがあります

ユーザーのIDを取得できませんでした」というメッセージを受け取ったときに実行されるSQLクエリを確認するのは非常に興味深いことです。 これを簡単に再現できる場合は、SQLクエリのログ記録を有効にして、結果を報告できれば非常に価値があります。

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

ありがとうございました

@marefrこれらのエラーは、常に次の2つのクエリのいずれかに囲まれて発生するようです。

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が提供されます。 本当に奇妙です。 サードパーティのデータベースlibxormにバグがあると考え始めました。

それらのログメッセージを生成するために何か特別なことをしましたか?
どのデータベースを使用していますか? どのセッションストレージ?
どのリクエストが不正になっているのか、ルーターログを有効にしてすべてのリクエストをログに記録できます。

[server]
router_logging = true

Kubernetesの5.1.4でも同じエラーが発生します。

こんにちは@marefr 、申し訳ありませんが、追加の要求された詳細で応答するのを忘れました。

それらのログメッセージを生成するために何か特別なことをしましたか?

クエリは、ダッシュボードをロードしてから自動更新を待つことで生成されます。 すべての自動更新で発生するわけではなく、ダッシュボードの更新ボタン(ブラウザーの更新ボタンではなく、Grafanaに組み込まれているボタン)を手動でクリックするとトリガーされる場合がありますが、通常は、ユーザーが非アクティブ(たとえば、バックグラウンドタブにgrafanaを残します)。

どのデータベースを使用していますか? どのセッションストレージ?

データベースはマウントされたNFS(EFS)共有上のSQLiteであり、セッションストレージがデフォルト(ファイル)ですが、メモリベースのストレージも試しましたが、同じ問題がありました。 ロードバランサーの背後に1つの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を使用しますが、ローカルファイルシステムで使用します。 これと同じ問題は発生していません。

また、パフォーマンスを向上させるために、grafanaのSQLite構成を調整してWALモード(最終的にはPRを実行します)を使用します。

GitHawkで送信

DockerのGrafanaスタックとInfluxDBスタックで同じ問題が発生しています。
Grafana v5.1.3(コミット:087143285)
InfluxDB 1.5.3

Grafanaは、sqliteデータベースを備えたDockerボリュームを介してローカルストレージを使用しています。 ボリュームはローカル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を参照してください。

同じ問題がここにもあります。 私のDockerセットアップは次のとおりです。

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(またはそのライブラリの1つ)のバグであると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()あり、そのレイヤーが正しい応答を返さないことがあります。 私はすべてのリクエストをファット50グラフダッシュボードに1分間で1晩記録し、クラスター化されたエラーを伴う非常にランダムなパターンを確認しました。すべてが並行性/レースの問題を示しています。 現在、行リーダーからのエラーを適切に伝播するパッチを実行しています(この問題の主な候補)。別のエラーメッセージが表示されるかどうかを確認します。

早かった。 エラー伝播パッチを適用すると、根本的な原因が見つかりました。

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がゴルーチンセーフであるとは知られていない(これにより、中央のxorm管理接続でこのすべてが悪い考えになる可能性があります)。
  2. SQLiteは、単一の「接続」での同時クエリをサポートしていません。 SQLiteへの複数の接続を開くには、xormを取得する必要があります。 そうしないと、SQLiteが同じ接続からのロックを解決しようとしないため、デッドロックまたはこれらのロックエラーが発生する可能性があります。

私は人々がこれらのSQLiteの問題を回避するために複数のことをしているのを見てきました。たとえば、すべてのSQLiteアクセスを単一のミューテックスにラップしたり、リクエストごとに新しいSQLiteインスタンスを開いたりします。 最も簡単な方法は、go-sqlite3をハックして、「接続」ごとにミューテックスを含め、すべてのアクセスをシリアル化することです(編集:カーソルから読み取るときにロックが表示されるため、これはおそらく機能しないことに気づきました。デッドロックのリスクを冒さずにロックすることはできません)。 それがCプログラムがそれを行う方法です(SQLiteはそのために作られました)。 遅いかもしれませんが、パフォーマンスが必要な人はとにかくPostgreSQLに行くべきです。

これを掘り下げてくれてありがとう、 @ lorenz 。 これがsqliteレベルの何かによって引き起こされている可能性があるというあなたの指摘は、インスタンスの構成データベースをSQLiteからPostgresに移動するように促しました(そして、以前はファイルバックされていたPostgresにもセッションを配置しました)。 それは決定的な証拠ではありませんが、それ以来、許可されていない問題は見ていません。

この回避策の試行に関心のある他の人のために、デフォルト設定でpgloaderを使用し、移行中にセッションまたはユーザーデータをドロップしませんでした。

「より大きな」データベースにはすべてこの問題を解決するMVCCがあるため、この問題は間違いなくSQLiteバックエンドでのみ発生します。 個人的には、本番インスタンスもPostgreSQLに移動しました。 SQLiteバックエンドでこれを解決するかどうか、そしてどのように解決すべきかという問題がまだ残っています。 Grafana(Goで記述されているため)は、Xormが現在提供しているものを超えて、SQLiteで特別な注意を必要とする並行性を多用しているため、これを行う簡単な方法はわかりません。

それを回避しようとするコードにはすでにたくさんのロックと再試行がありますが、それらは不十分です。 行リーダーのエラー処理を修正したので(現在、ロックエラーを黙って飲み込み、予測できない動作が発生するため、すぐに修正をPRします)、データだけでなく、より多くの場所にロックエラーが表示されるのを確認しました。ソースプロキシ。最も頻繁にヒットするのはエンドポイントであり、バグの確率的な性質により、最もユーザーに表示されるエンドポイントになります。 私が見る限り、これに対するすべての修正にはXormまたはgo-sqlite3のハッキングが必要ですが、これは一般的に望ましくありません。

素晴らしい分析@lorenzをありがとう! この場合に500を返すことは、合理的な短期的な回避策になると思いますか? 現在のところ、401はブラウザ(少なくともChrome)にパスワードを忘れさせ、ユーザーにパスワードを再入力するように要求します。 パスワードが最終的に受け入れられるまで、複数回入力する必要がある場合があります。

私の現在の回避策は、 tmpfsからデータベースを実行することです。 この問題の頻度は減りますが、それでも時々発生します。

@kichikエラー処理への変更を

#13007でエラー報告の変更をPRしたところです。これは、ロックの問題の影響を受けているのか、それとも無関係なものなのかを確認するのに役立ちます。

@torkelo明らかにGrafanaの問題なので、これを再開できますか?

私にとっては間違いなく単一のタブ(および単一のユーザー)で発生します。
また、sqlite3を使用します。 興味深いことに、私は以前にこの問題を抱えていませんでした。 いくつかの重い(クエリに関して)パネルを追加したので、このエラーが頻繁に発生します。通常は、重いパネルの1つだけです。

sqlite3以外のDBに切り替えると、問題が解決することを確認します。 私は単一のユーザーと単一のタブでも取得していましたが、重い/忙しいパネルの動作も悪化していました。

更新:完全に修正するには、セッションを切り替えて別のデータベースに保存する必要があります。

同じ問題に直面しているmysqldbを使用しています。 Grafanaバージョン5.2.3、Lbレベルでスティッキネスを有効にしましたが、問題はまだあります。

また、これを経験し、データバックエンドとしてsqliteを使用しますが、grafana5.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

Grafana5.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 / now 5.3.4 amd64
influxdb / now 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"

シングルGrafana5.3.4、ストレージはAmazon EFSファイルシステム(NFSマウント)
セッションはファイルに設定され、データストレージはsqlite(/var/lib/grafana/grafana.db)です
GrafanaはHTTPS終端LBの背後にあります

@ oleh-ozimokの提案を実装するPRを作成しました。 お気軽にお試しください。 休暇から家に戻ったら、もう一度試してみます。そうすれば、長時間実行されるインスタンスを作成できます:)

@ oleh-ozimok PRを作成したい場合は、私の代わりにそれをマージしてクレジットを提供できれば幸いです。

ところで素晴らしい仕事@lorenz

これは、展開にも影響します。 HA /マルチマスターモードで実行されている2つのAmazonAuora MySQLデータベースを使用すると、401の不正エラーが常に発生します。 セッションが両方のデータベースにあることを確認しました。 しかし、それでも、すべてのインスタンスを同じデータベースにポイントして、問題が解決するかどうかを確認しましたが、解決しませんでした。 セッションが正しく認証されていることに間違いなく問題があります。 これは、Oauthの設定でさらに進んでいます。 ユーザーが構成済みのOauthプロバイダーを使用してログインし、リダイレクトされるとログインに失敗する場合があります。 彼らが約2〜3回ログインすれば、それは機能します。

それは非常に奇妙です、多分サーバーのいくつかは異なって構成されていますか?

ログの詳細はありますか?

セッションストレージの必要性を排除し、v6でのログインセッションの管理方法を完全に書き直しているので、うまくいけばそれが解決されるでしょう。

@buroa 6.0-

@bergquistは2019-02-01T09:58:20 + 0200に私の設定を更新しましたが、今のところこのエラーは発生していません。

@buroa 6.0-

最新のビルドを使用しています//github.com/buroa/grafana/tree/us-iso-regions

これには必要な変更がありますか?

@buroaはい。ただし、6.0-beta1以降にいくつかの変更を行ったため、最新のマスターにマージすることをお勧めします。

今日はエラーが発生しました
t = 2019-02-08T10:05:58 + 0200 lvl = info msg = "Cookieに基づいてユーザーを検索できませんでした" logger = context error = "ユーザー認証トークンが見つかりません"
ブラウザタブは閉じておらず、1時間ごとに自動更新されましたが、PCはロックされていました。

@QuantumProjectsは、Grafana v6.0-preに問題があるため、新しい問題を開いて

@marefr OK

@marefr私は同じ「無許可」を取得しています-ポップアップ、おそらく私のセットアップは問題を理解するのに役立ちます:

  • grafanaをホストしているローカルサーバーを指すリバースプロキシとして
  • Grafanav5.4.3を搭載したローカルサーバー
  • データソースは、同じローカルサーバー上のinfluxdbv1.7.8です。
  • 問題の認証タイプを見つける方法は? 管理者ユーザーとしてログインするだけです

注:すべてのサービスは、Dockerコンテナー、traefik x64、grafana、およびinfluxdbarm32v7です。

これは、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"

データポイントを追加するだけで、データベースをsqliteからpostgresに移動すると、これらのエラーは表示されなくなりました。 以前は、システムの使用を非常に不快にするほど頻繁に使用されていました。 GoogleOAuthを使用して単一の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のログにはいくつかのバリエーションがあります

こんにちは、

今日も同じ問題がありました。 数日前にアップグレードされたプレーンなDebianStretch上のGrafana6.0.1があります。 Grafanaは、MariaDB 10.2(Galeraクラスター)をバックエンド(3ノードの同期モード)としてロードバランサー(proxysql)に接続します。
許可としてLDAP(Windows AD)を使用します。

ログメッセージ:

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

唯一機能したのは、ロードバランサーではなく直接IPを使用することでした。

唯一機能したのは、ロードバランサーではなく直接IPを使用することでした。

私たちの問題は断続的であるため、同じ問題のようには聞こえません-おそらく、数十回ごとに1つのパネルがエラーで失敗する可能性がありますが、通常は機能します

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を使用した通常のDockerインストール。

私にとっても同じことが起こっています
バージョン6.02
「Cookieに基づいてユーザーを検索できませんでした」logger = context error = "データベースがロックされています"

Sqlite(デフォルト)で「データベースがロック」されている場合は、より多くのトランザクションを処理できるため、mysql / postgresに移行するのがよいでしょう。

@bergquistそれが確かに解決策だと思います。 MariaDBに移行したばかりで、Grafanaから投げ出されることはもうありません。 タック!

@bergquistそれが確かに解決策だと思います。 MariaDBに移行したばかりで、Grafanaから投げ出されることはもうありません。 タック!

明確にするために、それは「データベーステーブルがロックされている」ではなく「データベースがロックされている」の解決策かもしれません-私はPostgreSQLを使用していて、「テーブルロック」に直面しています。

RaspbianをアップグレードしてPostgres9.6(9.4から)に移行した後、解決しました。 Grafanaはまだ5.4.3にあります

RaspbianをアップグレードしてPostgres9.6(9.4から)に移行した後、解決しました。 Grafanaはまだ5.4.3にあります

私が言ったことを忘れてください...それは戻ってきました。 それほど頻繁ではないと思いますが...それでも起こっています。

@ggggh何か解決策はありますか? それは私にとって突然起こり始めたばかりです!

@ggggh何か解決策はありますか? それは私にとって突然起こり始めたばかりです!

何もない...! それはpostgresバージョンのアップグレードでクリアされ、毎日より頻繁に再び戻ってくるようです

@gggghありがとう!
私はPostgresに切り替えましたが、それも役に立ちません:(

Grafana6.2.1とPostgress11を使用しても同じ問題が発生しますが、これはJSONからロードしてアクセスしようとしたダッシュボードでのみ発生します。

これに関する更新はありますか?

OK、私の場合は問題が見つかりました。 私のPGの接続数は限られており、grafanaではmax_open_connが設定されていませんでした。 このオプションを設定した後は、問題なく動作します。

Grafana6.1.6とパッケージ化されたSQLiteDBでも同じことが起こっています。 この問題は、Grafanaをカスタマイズするための社内開発の取り組みを中断させます。 max_open_conn変更しても機能しません(ただし、Postgresの修正であるため、変更するとは思っていませんでした)。

これの根本的な原因は、接続しようとしているgrafanaにあるようです。
認証時に基礎となるDBですが、認証に失敗します。 SQLiteを使用すると、
SQLiteがロックするため、頻繁に発生し、同時使用数は少なくなります
とても積極的に。 ほとんどの場合、実際のRDBMSへの移行(postgresが好きです)
問題を解決します。 あなたが遭遇した場合、それは再び現れる可能性があります
接続制限(または同様の)の問題ですが、それはDBの懸念以上のものです
Grafanaの懸念。 デモ以外の目的でGrafanaを使用している場合は、
実際のDBでバックアップする必要があります。 そのDBが正しく構成されている場合
あなたの使用法、それはこの問題を解決するはずです。

月、2019年6月10日には11:20 syardumian-CHCで[email protected]
書きました:

Grafana6.1.6とパッケージ化されたSQLiteDBでも同じことが起こっています。 この
問題は、Grafanaをカスタマイズするための社内開発の取り組みを壊します。 変化
max_open_connは機能しません(ただし、
Postgresの修正)。


このスレッドにサブスクライブしているため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/grafana/grafana/issues/10727?email_source=notifications&email_token=AAAK6YSUDLXPF2E4436CEOTPZ2EMFA5CNFSM4EO23EH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOOR
またはスレッドをミュートします
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をインストールしましたが、同様の問題が発生しました。
docker image 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

多くのDocker画像のように、grafanaが高山画像と非高山画像の両方を出荷することは可能でしょうか? そのように問題を解決するようです。
これをテストしたり、デバッグを支援したりするために私にできることがあれば、要求に応じて情報を提供します。

6.3.6(高山ベースではない)にダウングレードした後、問題は私の側で完全に消えました。

同じ問題に直面しました。2つの別々のGrafana(コンテナー)が同じブラウザーで開きます
2番目にログインすると、最初にもう一度ログインするように求められます。最初にログインすると、2番目に再度ログインするように求められます。
両方のログインを維持することはできません
私が見つけた解決策は、Grafanadefault.iniファイルの1つを変更することです。
login_cookie_name = grafana_session

login_cookie_name = grafana_session_1
コンテナとブラウザを再起動すると、正常に動作するようになります
今のところ、ファイルをコンテナの外に置いておきます
コンテナを作成するときにこのパラメータを設定する必要があります

@ikkerensは、ubuntuベースの画像を試してください

@ n0-bs申し訳ありませんが、Grafanaの複数のインスタンスを実行している場合は、データベースとしてMySQLまたはPostgresを使用することをお勧めします。

申し訳ありませんが、MySQLまたはPostgresをデータベースとして使用すると、同じブラウザでこれら2つの異なるGrafanaインスタンスを開いたときに、Cookieの競合がどのように解決されますか。HAの場合については説明していません。
同じサーバー上に2つの異なる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を使用していますが、アクセスするたびに不正な問題が発生します。 kubernetesでGrafanaを使用しています。 3つの異なるノードの3つの異なるポッドにデプロイしました。 私はそれのネイティブデータベースを使用しています。 問題を修正するための提案はありますか?

@emzfuu複数のインスタンスを実行する場合は、それらすべてを同じデータベースにポイントする必要があります。 mysql / postgres

@bergquistこの問題を解決する他の方法はありますか?

単一のロードバランサーを介してアクセスしている3つの異なるGrafana(スタンドアロン)を使用して、上記の質問を詳しく説明します。 3 Grafanaには独自のデータベース(sqlite3)があります。 アクセスするたびに、許可されていないエラーが表示されます。

私は同じ問題を抱えています、nfsを使用してください。

このページは役に立ちましたか?
0 / 5 - 0 評価