AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 712998
Accepted
Raptor
Raptor
Asked: 2015-08-10 18:50:35 +0800 CST2015-08-10 18:50:35 +0800 CST 2015-08-10 18:50:35 +0800 CST

Existe algum filtro disponível para a página de status do servidor Apache?

  • 772

Eu habilitei a página Apache Status por mod_statusmódulo. A lista de processos é muito longa e a maioria deles são OPTIONS * HTTP/1.0, que desejo filtrar.

Existe algum ajuste, opção ou sinalizador para ocultar esses OPTIONSprocessos?

apache-2.2
  • 1 1 respostas
  • 2389 Views

1 respostas

  • Voted
  1. Best Answer
    Damiano Verzulli
    2015-08-11T12:29:20+08:002015-08-11T12:29:20+08:00

    Além de recompilar mod_status para atender às suas necessidades (isso pode parecer um pouco exagerado, mas .... ainda é viável), mod_status fornece uma opção projetada especificamente para processamento legível por máquina. De acordo com a documentação oficial :

    Uma versão legível por máquina do arquivo de status está disponível acessando a página http://your.server.name/server-status?auto . Isso é útil ao executar automaticamente [...]

    Portanto, capturar a saída de mod_status é tão simples quanto incluir uma chamada para wget , curl ou qualquer outra biblioteca de cliente http que possa ser lançada/incluída em seu aplicativo, de acordo com sua necessidade.

    Infelizmente acabei de descobrir que ao usar o formato "?auto", a maioria das informações adicionais fornecidas pela diretiva ExtendedStatus não são exibidas! Isso significa que com a opção "?auto", você não tem acesso à lista de processos.

    Como soou um pouco estranho, verifiquei o código-fonte do módulo mod_status . Além de uma opção "?notável" adicional e não documentada, o código-fonte em " apache2-2.2.22/modules/generators/mod_status.c " (do meu notebook Ubuntu 12.04 LTS) inclui:

     * /server-status - Returns page using tables
     * /server-status?notable - Returns page for browsers without table support
     * /server-status?refresh - Returns page with 1 second refresh
     * /server-status?refresh=6 - Returns page with refresh every 6 seconds
     * /server-status?auto - Returns page with data for automatic parsing
    

    (A propósito: achei interessante e curioso ler "?notável - Página de retorno para navegadores sem suporte a tabelas" já que sou tão velho/antigo que me lembro dos primórdios da web, onde o suporte a tabelas era um novo recurso dos navegadores disponíveis !)

    Também verifiquei que a lista de processos ausente no formato "?auto" é um recurso de design:

    #define STAT_OPT_AUTO     2
    [...]
    static const struct stat_opt status_options[] =
    {
        {STAT_OPT_REFRESH, "refresh", "Refresh"},
        {STAT_OPT_NOTABLE, "notable", NULL},
        {STAT_OPT_AUTO, "auto", NULL},
        {STAT_OPT_END, NULL, NULL}
    };
    [...]
    if (r->args) {
    [...]
         case STAT_OPT_AUTO:
            ap_set_content_type(r, "text/plain; charset=ISO-8859-1");
            short_report = 1;
            break;
    [...] 
    if (short_report)
        ap_rputs("\n", r);
    else {
        ap_rputs("</pre>\n", r);
        ap_rputs("<p>Scoreboard Key:<br />\n", r);
        [...lots of other things, including "processlist"...]
    }
    [...]
    

    Como você pode ver, o que você precisa está na parte "else" do último "if". Portanto, não está incluído no formato "?auto", pois neste caso caímos no caso "short_report".

    Então, depois de tudo o que foi dito acima e voltando à sua pergunta: " Existe algum ajuste, opção ou sinalizador para ocultar esses processos OPTIONS? ", minha resposta é que sua única opção é "ajustar" um pequeno aplicativo que:

    1. age como um cliente HTTP versus o URL padrão /server-status ;
    2. analise os resultados para extrair dados da tabela HTML processlist;
    3. pule as linhas da tabela relacionadas à solicitação OPTION;
    4. faça o que você precisa com as outras linhas.

    Como estou familiarizado com PERL e tive alguma sorte com o módulo HTML::TableExtract , uma boa base que você pode usar é a seguinte:

    #!/usr/bin/perl
    
    use strict;
    
    use HTML::TableExtract;
    
    # PATH to "curl" utility
    my $CURL = "/usr/bin/curl";
    
    # URL of the server-status we want to process
    my $STATUS_URL = "http://localhost/server-status";
    
    # those are the headers in the first row of the table we want to extract
    # Used by HTML::TableExtract to search for our table, within the whole HTML output
    my $headers =['Srv','PID','Acc','M','CPU','SS','Req','Conn','Child','Slot','Client','VHost','Request'];
    
    
    # Let's fetch the status page...
    my $output = `$CURL -s $STATUS_URL`;
    
    # Let's search for our table within the HTML...
    my $tables = HTML::TableExtract->new( headers => $headers );
    
    # We found it (hopefully), so let's parse it...
    $tables->parse($output);
    
    # ...and let's stick to the first one
    my $status_table = $tables->first_table_found;
    
    # Now let's loop allover the rows...
    foreach my $row_ref ($status_table->rows) {
          # Let's de-reference the ARRAY reference, so to better manager
          # the various elements...
          my @row = @$row_ref;
    
          # Let's check for an OPTIONS row...
          if ($row[12]=~/OPTIONS/) {
             # simply skip to next row in the loop
             next;
          }
    
          # Let's choose whatever columns we want (first column has index "0")
          # So here we have Srv, PID, Client and Request
          foreach my $column (0,1,10,12) {
            print $row[$column]."|";
          }
          print "\n";
    }
    

    No meu caso, o script acima produz a seguinte saída:

    verzulli@tablet-damiano:~$ perl elab.pl 
    0-1|9183|127.0.0.1|GET /server-status HTTP/1.1|
    1-1|9184|127.0.0.1|GET /server-status HTTP/1.1|
    2-1|9185|127.0.0.1|GET /server-status HTTP/1.1|
    3-1|9186|127.0.0.1|GET /server-status HTTP/1.1|
    4-1|9187|127.0.0.1|GET /server-status HTTP/1.1|
    5-1|9188|127.0.0.1|GET /server-status HTTP/1.1|
    

    e você pode ver, pule as linhas OPTIONS.

    Observe que o aplicativo acima carece de tratamento básico de erros, portanto ... não me culpe se algo der errado :-)

    • 11

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve