como posso ver quais portas o mongo está escutando no shell do mongo?

99

Se eu tiver uma instância do mongo em execução, como posso verificar quais números de porta ela está ouvindo no shell? Pensei que db.serverStatus()isso fosse suficiente, mas não vejo. Eu vejo isso

"connections" : {
    "current" : 3,
    "available" : 816

Que é perto ... mas não. Sugestões? Eu li a documentação e não consigo encontrar nenhum comando que faça isso.

Jcollum
fonte
Você precisa de uma concha de mongo? Ou o shell unix regular fará? :)
Sergio Tulentsev
@SergioTulentsev Estou pensando especificamente se isso é possível dentro do shell do mongo - já que encontrei informações próximas.
jcollum

Respostas:

72

Você pode usar o shell do sistema lsof(consulte a resposta de Derick abaixo) ou netstat -anver o que um processo está realmente fazendo. No entanto, presumindo que você só tenha acesso ao mongoshell (o que implica o título da sua pergunta), você pode executar o serverCmdLineOpts()comando. Essa saída fornecerá todos os argumentos passados ​​na linha de comando (argv) e os do arquivo de configuração (analisado) e você pode inferir que as portas mongodestão escutando com base nessas informações. Aqui está um exemplo:

db.serverCmdLineOpts()
{
    "argv" : [
        "./mongod",
        "-replSet",
        "test",
        "--rest",
        "--dbpath",
        "/data/test/r1",
        "--port",
        "30001"
    ],
    "parsed" : {
        "dbpath" : "/data/test/r1",
        "port" : 30001,
        "replSet" : "test",
        "rest" : true
    },
    "ok" : 1
}

Se você não passou opções de porta específicas como as acima, o mongodestará escutando em 27017 e 28017 ( console http ) por padrão. Observação: há alguns outros argumentos que podem alterar as portas sem serem explícitos, veja aqui:

https://docs.mongodb.org/manual/reference/configuration-options/#sharding.clusterRole

Adam Comerford
fonte
4
Meu resultado é: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }isso não me diz muito. Acho que está me dizendo que estou na porta padrão.
jcollum de
5
certo - se não for especificado de forma alguma (e no seu caso parece que sim), então tudo é padrão, o que o coloca em 27017
Adam Comerford
220

Você pode fazer isso a partir do shell do sistema operacional executando:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Derick
fonte
4
@SmartyTwiti Eu pedi explicitamente por um comando usando o shell mongo; lsof não funciona
jcollum
35

Experimente isto:

db.runCommand({whatsmyuri : 1})

Ele exibirá o endereço IP e o número da porta.

Ganu
fonte
isso é novo? em qual versão do mongo ele apareceu?
jcollum
1
@jcollum Versão 3.0 tem esse novo recurso.
Ganu
6
Parece que mostra a porta do shell ou algo assim ... Saída de lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) E do whatsmyurlcomando: {"you": "127.0.0.1:50294", "ok": 1 } E eles não combinam.
dmi3y de
12

O MongoDB escuta apenas em uma porta por padrão (27017). Se a --restinterface estiver ativa, a porta 28017 (27017 + 1000) também estará aberta para lidar com solicitações da web para obter detalhes.

O MongoDB suporta um getParametercomando, mas isso só funciona se você já estiver conectado ao Banco de Dados (nesse ponto, você já conhece a porta).

Gates VP
fonte
2
Hmm, então podemos dizer que se estou conectado e não conheço a porta, deve ser 27017. Se a porta não for 27017, devo conhecer a porta para conectar. Parece certo?
jcollum
2

Experimente o comando a seguir, este funciona para mim:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
nixxo_raa
fonte