Mongodb

在 GCE 中使用 StackDriver 監控 MongoDB 3

  • July 12, 2016

有沒有人成功地在 GCE 中使用 StackDriver 監控 MongoDB 3 集群(或獨立數據庫)?

我在 GCE 中設置了一個 MongoDB 3.0.6 集群(具有 2 個副本和 1 個仲裁器的副本集)

我正在嘗試通過 Google 提供的 StackDriver 對其進行監控。

我已按照所有說明安裝此處找到的監控代理和 mongodb 外掛: https ://cloud.google.com/monitoring/agent/plugins/mongodb

當我在配置它的副本上啟動代理時:

sudo /etc/init.d/stackdriver-agent restart

我在 /var/log/syslog 中收到以下錯誤:

collectd[6013]: tcpconns plugin: Reading from netlink succeeded. Will use the netlink method from now on.
collectd[6013]: mongo plugin: Authenticating to localhost:27017 failed:
collectd[6013]: mongo plugin: Connecting to localhost:27017 failed:
collectd[6013]: read-function of plugin `mongodb' failed. Will suspend it for 120.000 seconds.

我懷疑 StackDriver 代理與 MongoDB 3 不兼容,因為:

  • 過去,我使用 GCE 的 Click-to-deploy 功能創建了一個集群,並能夠使用 StackDriver 對其進行監控。當時是 MongoDB 2.6.x。
  • 我很快再次安裝了 MongoDB 2.6.x 的獨立安裝,以相同的方式配置了 StackDriver 代理,並且……它可以工作:-(

任何幫助將不勝感激。

配置詳情:

蒙哥達:

  • 授權=真
  • 在數據庫管理員中,具有角色的使用者:dbAdminAnyDatabase、clusterAdmin 和 readAnyDatabase

Stackdriver Mongodb 外掛:

  • 此使用者和密碼在 /opt/stackdriver/collectd/etc/collectd.d/mongodb.conf 中使用

附加資訊 :

No Auth : 外掛初始化成功

/etc/mongod.conf :

# Turn on/off security.  Off is currently the default
#noauth = true
#auth = true

/opt/stackdriver/collectd/etc/collectd.d/mongodb.conf :

LoadPlugin mongodb

<Plugin "mongodb">
   Host "localhost"
   Port "27017"

  #  If you restricted access to the database, you can
  #  set the username and password here
  #  User "user_name"
  #  Password "user_password"

  # For performance/eventually consistent trade-offs you may add this line
  # PreferSecondaryQuery true
</Plugin>

身份驗證模式:重新啟動代理時的身份驗證錯誤

/etc/mongod.conf :

# Turn on/off security.  Off is currently the default
#noauth = true
auth = true

配置 3 個使用者

use admin
db.createUser(
 {
   user: "siteUserAdmin",
   pwd: "xxx",
   roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
 }
)

db.auth("siteUserAdmin", "xxx");

db.createUser( {
   user: "siteRootAdmin",
   pwd: "xxx",
   roles: [ { role: "root", db: "admin" } ]
 });

db.createUser(
 {
   user: "monitoring",
   pwd: "xxx",
   roles: [ 
   { role: "dbAdminAnyDatabase", db: "admin" },
   { role: "clusterAdmin", db: "admin" },
   { role: "readAnyDatabase", db: "admin" } ]
 }
)

/opt/stackdriver/collectd/etc/collectd.d/mongodb.conf :

LoadPlugin mongodb

<Plugin "mongodb">
   Host "localhost"
   Port "27017"

  #  If you restricted access to the database, you can
  #  set the username and password here
  User "monitoring"
  Password "xxx"

  # For performance/eventually consistent trade-offs you may add this line
  # PreferSecondaryQuery true
</Plugin>

當我在外掛配置中使用 siteRootAdmin 時出現同樣的錯誤。

解釋和解決方案

罪魁禍首實際上是 StackDriver 代理使用的身份驗證模式

我調整了 Adam C 建議的解決方案,因為我已經有使用 SCRAM-SHA-1 模式創建的使用者。

事實上,我只需要監控的使用者使用 MONGODB-CR。

這樣做:

在禁用身份驗證的情況下重新啟動 MongoDB 3.0

連接到實例

暫時將身份驗證模式更改為 MONGODB-CR

use admin
var schema = db.system.version.findOne({"_id" : "authSchema"});
schema.currentVersion = 3;
db.system.version.save(schema);

為 StackDriver 外掛創建使用者

db.createUser(
     {
       user: "monitoring",
       pwd: "xxx",
       roles: [ 
       { role: "dbAdminAnyDatabase", db: "admin" },
       { role: "clusterAdmin", db: "admin" },
       { role: "readAnyDatabase", db: "admin" } ]
     }
   )

檢查它是否具有正確的身份驗證模式:MONGODB-CR

> db.system.users.find({"user":"monitoring"})
{ "_id" : "admin.monitoring", "user" : "monitoring", "db" : "admin", "credentials" : { "MONGODB-CR" ...

將身份驗證模式設置回 SCRAM-SHA-1

var schema = db.system.version.findOne({"_id" : "authSchema"});
schema.currentVersion = 5;
db.system.version.save(schema);

重新啟動 MongoDB 3.0 並啟用身份驗證

重新啟動 StackDriver 代理

當 StackDriver 將支持 SCRAM-SHA-1 時,升級此使用者的身份驗證模式將很有用

db.adminCommand({authSchemaUpgrade: 1});

我懷疑堆棧驅動程序不(還)支持新的SCRAM-SHA-1身份驗證機制。這個新機制是在 3.0 中添加來替換MONGODB-CR的,並且是 3.0+ 中的預設設置,但是它要求驅動程序支持新機制。

要讓 MongoDB 3.0 使用舊機制,您可以從 2.6 開始並在那裡創建使用者,然後升級,或者您可以執行以下操作(基於此評論):

  • 在禁用身份驗證的情況下啟動 MongoDB 3.0(確保尚未添加任何使用者)
  • 連接到實例並執行以下命令:

var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema);

  • 在啟用身份驗證的情況下啟動 MongoDB 並創建您的使用者

這些用途現在應該使用MONGODB-CR. StackDriver 正在使用從1.1libmongoc版開始支持 SCRAM-SHA-1,但根據一些 Github 瀏覽,它們的版本看起來要舊得多。一旦他們更新了他們的驅動程序,這個問題應該會消失 - 現在你必須解決它。

引用自:https://serverfault.com/questions/723361