在 GCE 中使用 StackDriver 監控 MongoDB 3
有沒有人成功地在 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 瀏覽,它們的版本看起來要舊得多。一旦他們更新了他們的驅動程序,這個問題應該會消失 - 現在你必須解決它。