Use o Grafana para visualizar e analisar logs do Nginx coletados pelo Simple Log Service (SLS).
Para testar esse recurso rapidamente, use o link de acesso sem login: Demo - Grafana.
Você pode exportar um painel do Simple Log Service (SLS) e importá-lo no Grafana. Para mais informações, consulte Exportar um painel e importá-lo para o Grafana.
Pré-requisitos
Colete logs do Nginx. Para mais informações, consulte Usar o modo de configuração do Nginx para coletar logs de texto.
Ative e configure índices. Para mais detalhes, consulte Analisar logs de acesso do Nginx.
-
Baixe o pacote do projeto do plugin de source de dados.
Execute o comando a seguir para baixar o pacote:
wget https://github.com/aliyun/aliyun-log-grafana-datasource-plugin/archive/refs/heads/master.zip.NotaEste tópico usa o plugin SLS v2.36 como exemplo.
-
Instale o Grafana. Para mais informações, consulte a documentação oficial do Grafana.
NotaEste tópico usa o Grafana 11.4.0 como exemplo.
Se você instalar o Grafana na máquina local, verifique se a porta 3000 está acessível pelo navegador.
-
Para usar gráficos de pizza, execute o comando a seguir para instalar o plugin Pie Chart.
grafana-cli plugins install grafana-piechart-panel
Compatibilidade do plugin
A tabela a seguir descreve a compatibilidade entre o Grafana e o plugin SLS.
|
Versão do Grafana |
Versão do plugin SLS |
|
≥8.0.0 |
|
|
<8.0.0 |
Observações de uso
Ao configurar o redirecionamento baseado em STS, atenda às seguintes condições de segurança:
O usuário associado à chave de acesso da source de dados deve ter as políticas de acesso
AliyunRAMReadOnlyAccesseAliyunSTSAssumeRoleAccess, permissão para chamar a API CreateTicket e as permissões necessárias para o SLS.A função RAM especificada no campo RoleArn da source de dados deve ter apenas a política de acesso
AliyunLogReadOnlyAccess.Para mais informações sobre o funcionamento, consulte Incorporar e compartilhar páginas do console.
Se você configurar o acesso sem login, verifique se a source de dados não é usada em painéis do Grafana compartilhados publicamente. O acesso público pode aumentar os custos de tráfego e expor o conteúdo dos logs.
Para mais informações sobre políticas de acesso do sistema, consulte Políticas de acesso do sistema para o Simple Log Service.
Etapa 1: Instalar o plugin SLS
-
Execute o comando a seguir para extrair o pacote do plugin no diretório de plugins do Grafana.
-
Para Grafana instalado via repositório YUM ou pacote RPM:
unzip aliyun-log-grafana-datasource-plugin-master.zip -d /var/lib/grafana/plugins -
Para Grafana instalado a partir de um arquivo .tar.gz:
Neste comando, {PATH_TO} representa o caminho de instalação do Grafana.
unzip aliyun-log-grafana-datasource-plugin-master.zip -d {PATH_TO}/grafana-11.4.0/data/plugins
-
-
Modifique o arquivo de configuração do Grafana.
-
Abra o arquivo de configuração.
Para Grafana instalado via repositório YUM ou pacote RPM: /etc/grafana/grafana.ini
Para Grafana instalado a partir de um arquivo .tar.gz: {PATH_TO}/grafana-11.4.0/conf/defaults.ini
-
Na seção
[plugins]do arquivo de configuração, defina o parâmetroallow_loading_unsigned_plugins.allow_loading_unsigned_plugins = aliyun-log-service-datasource
-
-
Reinicie o Grafana.
Use o comando
killpara encerrar o processo do Grafana.-
Execute um dos comandos a seguir para iniciar o Grafana.
-
Para Grafana instalado via repositório YUM ou pacote RPM:
systemctl restart grafana-server -
Para Grafana instalado a partir de um arquivo .tar.gz:
./bin/grafana-server web
-
Etapa 2: Adicionar uma source de dados
Faça login no Grafana.
No painel de navegação à esquerda, escolha .
Na aba Data Sources, clique em Add data source.
Na página Add data source, pesquise por log-service-datasource e clique nele.
-
Na página aliyun-log-service-datasource, configure as seguintes definições.
-
A tabela a seguir descreve os parâmetros obrigatórios.
Parâmetro
Descrição
Endpoint
O endpoint do Project, como
http://cn-qingdao.log.aliyuncs.com. Use seu endpoint real. Para mais informações, consulte Endpoints.Project
O nome do Project no SLS.
AccessKeyID
O AccessKey ID identifica o usuário. Para mais informações, consulte Par de chaves de acesso.
Recomendamos conceder apenas as permissões estritamente necessárias a um usuário RAM, seguindo o princípio do menor privilégio. Para saber como conceder permissões a um usuário RAM, consulte Criar um usuário RAM e conceder permissões e Exemplos de políticas personalizadas do RAM.
AccessKeySecret
O AccessKey secret criptografa e verifica a string de assinatura. Mantenha o AccessKey secret em sigilo absoluto.
-
A tabela a seguir descreve os parâmetros opcionais.
Parâmetro
Descrição
Name
Nome da source de dados. O valor padrão é aliyun-log-service-datasource.
Default
Esta opção vem ativada por padrão.
Default LogStore
Se você omitir o Logstore, garanta que sua chave de acesso tenha a permissão
ListProjectpara o Project atual.RoleArn
Obrigatório para redirecionamento via STS. Especifique o ARN da função RAM.
HTTP headers
Há suporte para headers personalizados, que têm efeito apenas quando o tipo de source de dados é MetricStore(PromQL). Para detalhes de configuração, consulte as definições de
FormValueem Acelerar consultas. A lista a seguir descreve os campos deHeaders:-
x-sls-parallel-enable: Define se a computação simultânea será ativada. Desativado por padrão. -
x-sls-parallel-time-piece-interval: Unidade de tempo para fragmentação por intervalo de tempo, em segundos. O intervalo suportado é[3600, 86400*30]. O valor padrão é21600(6 horas). -
x-sls-parallel-time-piece-count: Quantidade de shards ao fragmentar por intervalo de tempo. O intervalo suportado vai de 1 a 16. O valor padrão é 8. -
x-sls-parallel-count: Concorrência global. O intervalo suportado vai de 2 a 64. O valor padrão é 8. -
x-sls-parallel-count-per-host: Concorrência por host. O intervalo suportado vai de 1 a 8. O valor padrão é 2. -
x-sls-global-cache-enable: Define se o cache global será ativado. Desativado por padrão.
Region
Suporta assinatura v4 para maior segurança.
-
-
Após concluir a configuração, clique em Save & test.
Etapa 3: Adicionar um painel
Para adicionar um painel ao Grafana:
No painel de navegação à esquerda, clique em Dashboards.
No painel Dashboards, clique em + Created dashboard. Em seguida, clique em + Add visualization.
Na página Select data source, selecione aliyun-log-service-datasource como source de dados.
-
Adicione um painel de visualização.
A lista a seguir descreve as configurações disponíveis:
-
Data Source Type: Quatro tipos estão disponíveis, baseados na sintaxe (SQL e PromQL) e no tipo de armazenamento: ALL(SQL), Logstore(SQL), MetricStore(SQL) e MetricStore(PromQL).
Logstores aceitam SQL para consulta e análise.
Metricstores aceitam SQL e PromQL para consulta e análise.
MetricStore(PromQL) permite adicionar headers personalizados na página de configuração da source de dados.
Logstore list: Selecione o nome do Logstore que deseja consultar.
-
Query: Insira uma instrução de consulta, por exemplo:
* | select count(*) as c, __time__-__time__%60 as t group by t ycol:
nullxcol: Selecione TimeSeries / Custom e insira
t.-
goto SLS: Redirecionamento direto para o console SLS com um clique.
Nas páginas Explore e de painéis, clique em goto SLS para acessar o console SLS e fazer comparações. Assim, você aproveita recursos mais avançados e capacidades flexíveis de busca de logs do console SLS. Durante o redirecionamento, as informações de consulta e período são transferidas automaticamente, evitando entrada manual.
Esse método de redirecionamento leva diretamente ao console SLS e não exige configuração adicional. No entanto, é necessário já estar logado no console SLS no navegador; caso contrário, você será redirecionado para a página de login.
NotaEsse recurso está disponível no SLS Grafana Plugin versão 2.30 ou superior.
-
Em Panel options, à direita, insira um título e clique em Save dashboard no canto superior direito. Na caixa de diálogo exibida, clique em Save.
Configurar variáveis de modelo
As variáveis de modelo no Grafana permitem alterar dinamicamente os dados exibidos em um gráfico.
Configurar uma variável de intervalo de tempo
No canto superior direito da página New dashboard, clique em .
Clique em Variables.
Clique em New variable.
-
Configure a variável de modelo com os parâmetros a seguir e clique em Add.
A tabela a seguir descreve os principais parâmetros.
Parâmetro
Descrição
Name
Nome da variável, como myinterval. Essa variável é usada na sua configuração e deve ser inserida como
$$myintervalna condição de consulta.Type
Selecione Interval.
Label
Defina como time interval.
Values
Defina como 1m,10m,30m,1h,6h,12h,1d,7d,14d,30d.
Auto Option
Ative a opção Auto Option e mantenha os demais parâmetros com suas configurações padrão.
Resultado. Após a configuração, uma lista suspensa de time interval aparece no topo do painel, permitindo selecionar intervalos como Auto, 1m, 10m, 30m, 1h, 6h, 12h ou 1d.
Configurar uma variável de nome de domínio
Na página Variables, clique em New.
-
Configure a variável de modelo com os parâmetros a seguir e clique em Add.
Parâmetro
Descrição
Name
Nome da variável, por exemplo, hostname. Esta é a variável utilizada na configuração; se o nome for hostname, especifique
$hostnamena condição de consulta.Type
Selecione Custom.
Label
Insira um nome de domínio.
Custom Options
Se definir o parâmetro como
*,example.com,example.org,example.net, será possível visualizar o status de acesso de todos os nomes de domínio. Também é possível visualizar separadamente o status de acesso deexample.com,example.orgouexample.net.Selection Options
Mantenha as configurações padrão.
Resultado. Após a configuração, uma lista suspensa de nomes de domínio aparece no topo do painel, permitindo selecionar * (todos os domínios), example.com, example.org ou example.net.
Configurar variável de lista de Logstore
-
Na página de configurações de Variables, selecione o tipo Custom. O campo
nameserve como identificador único e deve conter a string 'logstore', sem distinção entre maiúsculas e minúsculas. Em Custom Options, insira os valores da variável separados por vírgulas.

No editor do painel, altere a opção Logstore list para sua variável personalizada, selecione um valor e atualize o painel para ver os resultados.

Configuração de gráficos
Painéis Stat e Gauge
Formato de xcol: stat.
Formato de ycol: <numeric_column>, <numeric_column>.
Se você fornecer uma coluna não numérica onde uma coluna numérica é necessária, o valor será definido como 0.
-
Exemplo 1
Tipo de painel: Stat
xcol:
statycol:
PV, deltaPercentquery:
* | select diff[1] as "PV", round((diff[1] - diff[2])/diff[2] * 100, 2) as deltaPercent from (select compare("PV", 86400) as diff from (select count(*) as "PV" from log))O resultado da consulta é exibido em um painel Stat, mostrando duas métricas numéricas: PV e deltaPercent. Valores positivos aparecem em verde e negativos em vermelho, com um mini gráfico de linha de tendência abaixo de cada métrica.
-
Exemplo 2
Tipo de painel: Gauge
xcol:
statycol:
cquery:
* | select count(distinct labels['hostname']) as c from (select promql_query('${metricName}{cluster =~ "${cluster}"}') from metrics ) limit 100000O resultado da consulta aparece em um painel Gauge. O valor é mostrado como um indicador em arco no medidor, com o arco transitando do verde ao vermelho para representar a faixa de valores.
Gráfico de pizza
Formato de xcol: pie.
Formato de ycol: <grouping_column>, <numeric_column>.
-
Exemplo 1
Tipo de painel: Pie Chart
xcol:
pieycol:
request_method, cquery:
request_method: "$method" | select count(*) as c, request_method group by request_methodO resultado da consulta é exibido como um gráfico de pizza mostrando a distribuição de vários métodos de requisição HTTP, como GET, POST, PUT e DELETE.
-
Exemplo 2
Tipo de painel: Pie Chart
xcol:
pieycol:
http_user_agent, pvquery:
* | select count(1) as pv, case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end as http_user_agent group by case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end order by pv desc limit 10O resultado da consulta é exibido como um gráfico de pizza mostrando a porcentagem de tráfego de diferentes navegadores: Chrome, Firefox, Safari e unKnown.
-
Outros casos de uso
O formato usado nos painéis Stat também pode ser aplicado a gráficos de pizza para gerar uma visualização válida.
Tipo de painel: Pie Chart
xcol:
statycol:
hostNameNum, ipNumquery:
* | select count(distinct labels['hostname']) as hostNameNum, count(distinct labels['ip']) + 20 as ipNum from (select promql_query('${metricName}{cluster =~ ".*"}') from metrics ) limit 100000O resultado da consulta é exibido como um gráfico de pizza mostrando a proporção das métricas hostNameNum e ipNum.
Séries temporais
Formato de xcol: <time_column>.
Formato de ycol: <numeric_column> [, <numeric_column>, ...] (sintaxe Logstore) ou <labels / grouping_column>#:#<numeric_column> (sintaxe Metricstore ou sintaxe de agregação de logs).
-
Exemplo 1
Tipo de painel: Time series
xcol:
timeycol:
pv, uvquery:
* | select __time__ - __time__ % $${myinterval} as time, COUNT(*)/ 100 as pv, approx_distinct(remote_addr)/ 60 as uv GROUP BY time order by time limit 2000O resultado da consulta é exibido como um gráfico de linhas de séries temporais, mostrando as tendências de duas séries, pv e uv, ao longo do tempo.
-
Exemplo 2
Tipo de painel: Time series
xcol:
timeycol:
labels#:#valuequery:
* | select time, * from (select promql_query_range('${metricName}') from metrics) limit 1000O resultado da consulta é exibido como um gráfico de linhas de séries temporais, onde cada série recebe automaticamente um nome e é agrupada por seus rótulos.
-
Exemplo 3
Também é possível usar SQL para personalizar a exibição dos rótulos das séries temporais.
Tipo de painel: Time series
xcol:
timeycol:
customLabelsExtract#:#valuequery:
* | select concat(labels['ip'], ' -> ', labels['cluster']) as customLabelsExtract, value from (select promql_query_range('${metricName}') from metrics) limit 1000O resultado da consulta é exibido como um gráfico de linhas de séries temporais, com nomes de séries definidos pelo campo SQL personalizado customLabelsExtract (formato:
IP -> cluster).
Gráfico de barras
Formato de xcol: bar.
Formato de ycol: <grouping_column>, <numeric_column> [, <numeric_column>, ...].
-
Exemplo 1
Tipo de painel: Bar chart
xcol:
barycol:
host, pv, pv2, uvquery:
* | select host, COUNT(*)+10 as pv, COUNT(*)+20 as pv2, approx_distinct(remote_addr) as uv GROUP BY host ORDER BY uv desc LIMIT 5O resultado da consulta é exibido como um gráfico de barras horizontais comparando as métricas pv, pv2 e uv para cada host.
Tabela
O painel Table suporta ordenação por tempo com precisão de nanossegundos, caso exista um campo de nanossegundos.
É possível modificar a contagem de totalLogs. O padrão é 100, o mínimo é 1 e o máximo é 5000. Isso se aplica apenas a instruções de consulta, não a instruções de análise.
Sintaxe xcol: <empty>.
Formato de ycol: Deixe este campo vazio ou especifique <display_column> [, <display_column>, ...].
-
Exemplo 1
Tipo de painel: Table
xcol:
Table/Logycol:
<empty>query:
* | select __time__ - __time__ % 60 as time, COUNT(*)/ 100 as pv, approx_distinct(remote_addr)/ 60 as uv GROUP BY time order by time limit 2000O resultado da consulta é exibido em uma tabela com colunas para time, pv e uv.
Logs
Sintaxe xcol: <empty>.
Sintaxe ycol: <empty>.
Exemplo
Tipo de painel: Logs
xcol: <Empty>
ycol: <Empty>
query:
host: www.vt.mock.com
O resultado da consulta é exibido em um painel Logs mostrando entradas de log brutas, onde cada entrada exibe pares chave-valor para seus campos.
Traces
Tipo de painel: Traces
xcol: trace
ycol: <empty>
query:
traceID: "f88271003ab7d29ffee1eb8b68c58237"
O resultado da consulta é exibido em um painel Traces mostrando as informações de rastreamento. O lado esquerdo lista Service & Operation, e o lado direito mostra uma linha do tempo em gráfico de Gantt para cada span, ilustrando a hierarquia e a duração do trace.
Este exemplo usa um Logstore que contém dados de trace. É necessário ativar o serviço Trace no SLS. O SLS suporta ingestão nativa de dados de trace OpenTelemetry e também aceita ingestão de dados de outros sistemas de rastreamento. Para mais informações, consulte Visão geral da ingestão de dados de trace.
No Grafana 10.0 e versões posteriores, há suporte para filtragem de spans em dados de trace. Se estiver usando uma versão anterior do Grafana, também é possível definir filtros de span personalizados na consulta. Por exemplo:
traceID: "f88271003ab7d29ffee1eb8b68c58237" and resource.deployment.environment : "dev" and service : "web_request" and duration > 10
GeoMap
Formato de xcol: map.
Formato de ycol: <country_column>, <geolocation_column>, <numeric_column>.
Exemplo
Tipo de painel: GeoMap
xcol: map
ycol: country, geo, pv
query:
* | select count(1) as pv ,geohash(ip_to_geo(arbitrary(remote_addr))) as geo,ip_to_country(remote_addr) as country from log group by country having geo <>'' limit 1000
O resultado da consulta é exibido em um GeoMap, mostrando a distribuição de tráfego em diferentes regiões em um mapa-múndi. O tamanho dos círculos indica o volume de tráfego.
Perguntas frequentes
-
Onde os logs do Grafana são armazenados?
Os logs do Grafana ficam armazenados nos seguintes diretórios:
macOS: /usr/local/var/log/grafana
Linux: /var/log/grafana
-
O que fazer se aliyun-log-plugin_linux_amd64: permission denied aparecer nos logs?
Conceda permissões de execução ao diretório dist/aliyun-log-plugin_linux_amd64 dentro do diretório do plugin.

