Configuração do usuário para análise alarmes e estatísticas de log
Configuração de alarmes com base em dados de entidades visíveis do usuário
O Contrail permite configurar alarmes dinamicamente com base nos dados das entidades visíveis do usuário (UVE). Um objeto de configuração de alarme é criado com base no esquema XSD da configuração de alarme. O objeto de configuração de alarme é adicionado ao banco de dados de configuração do Contrail, usando a interface REST API do servidor Contrail API.
Um objeto de configuração de alarme pode ser ancorado no modelo de dados de configuração em global-system-config
ou projeto, dependendo do tipo de alarme. Em global-system-config
, você deve configurar alarmes de rede virtual em todo o sistema, como aqueles para o nó de análise, o nó de configuração e assim por diante. Em , project
você deve configurar alarmes relacionados a objetos de projeto, como redes virtuais e objetos semelhantes.
Para configurar e monitorar alarmes usando a UI do Contrail:
Exemplos: Detecção de anomalias
O objetivo da detecção de anomalias no Contrail é identificar uma condição em que uma métrica se desvia do valor esperado, dentro dos parâmetros determinados.
O Contrail usa um modelo estatístico de controle de processos para detecção de anomalias em série temporal que pode ser computado on-line, em tempo real. Métricas brutas são enviadas como estatísticas por geradores Sandesh incorporados dentro dos UVEs. O modelo usa o desvio padrão de execução e média em execução para uma determinada métrica bruta. O modelo não explica a sazonalidade e tendências lineares na métrica.
O exemplo a seguir representa parte da UVE enviada pelo vRouter para o coletor. As métricas brutas são phy_band_in_bps
e phy_band_out_bps
.
As estatísticas derivadas estão dentro in_bps_ewm
e out_bps_ewm
, que são geradas quando o algoritmo de EWM do modelo é aplicado às métricas brutas. As métricas brutas e as estatísticas derivadas fazem parte da UVE e são enviadas ao coletor.
struct EWMResult { 3: u64 samples 6: double mean 7: double stddev } struct VrouterStatsAgent { // Agent stats 1: string name (key="ObjectVRouter") 2: optional bool deleted … /** @display_name:Vrouter Physical Interface Input bandwidth Statistics*/ 50: optional map<string,u64> phy_band_in_bps (tags="name:.__key") /** @display_name:Vrouter Physical Interface Output bandwidth Statistics*/ 51: optional map<string,u64> phy_band_out_bps (tags="name:.__key") 52: optional map<string,derived_stats_results.EWMResult> in_bps_ewm (mstats="phy_band_in_bps:DSEWM:0.2") 53: optional map<string,derived_stats_results.EWMResult> out_bps_ewm (mstats="phy_band_out_bps:DSEWM:0.2") }
O seguinte mostra parte da UVE que lista a métrica phy_band_out_bps
bruta e a estatística out_bps_ewm
derivada. O usuário pode definir um alarme com base nos valores dentro sigma
ou dentro stddev
.
Configuração da estatística do log definido pelo usuário
Qualquer implantação do Contrail Cloud em um sistema de orquestração requer ferramentas para monitorar e solucionar problemas de toda a implantação da nuvem. Os data centers de nuvem são construídos com uma grande coleção de servidores interconectados que fornecem capacidade de computação e armazenamento para uma variedade de aplicativos. O monitoramento da nuvem e de sua infraestrutura requer monitoramento de logs e mensagens enviados a uma variedade de servidores de muitos micros serviços.
O Contrail Analytics armazena todas as mensagens monitoradas no nó do banco de dados do Contrail, e as análises geram uma grande quantidade de informações úteis que ajudam no monitoramento e resolução de problemas da rede.
Com o Contrail, o recurso de estatística de log definido pelo usuário oferece habilidades adicionais para monitoramento e resolução de problemas, permitindo que o usuário configure um contador sobre qualquer expressão regular do tipo Perl. Cada vez que o padrão é encontrado em quaisquer logs do sistema, UVEs ou logs de objetos, o contador é incrementado.
O log definido pelo usuário pode ser configurado a partir da UI do Contrail ou da linha de comando, usando vnc_api
.
Para configurar a estatística de log definida pelo usuário da UI do Contrail:
Para configurar a estatística definida pelo usuário a vnc_api
partir de:
user@host:~# python Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >> from vnc_api import vnc_api >> from vnc_api.gen.resource_xsd import UserDefinedLogStat >> from vnc_api.gen.resource_client import GlobalSystemConfig >> vnc = vnc_api.VncApi('<username>', '<password>', '<tenant>') >> gsc_uuid = vnc.global_system_configs_list()['global-system-configs'][0]['uuid'] >> gsc = vnc.global_system_config_read(id=gsc_uuid)
Para listar os contadores:
>> [(x.name, x.pattern) for x in gsc.user_defined_log_statistics.statlist] [('HostnameCounter', 'dummy'), ('MyIp', '10.84.14.38')]
Para adicionar um contador:
>> g=GlobalSystemConfig() >> g.add_user_defined_counter(UserDefinedLogStat('Foo', 'Ba.*r')) >> vnc.global_system_config_update(g)
Para verificar um acréscimo:
>> gsc = vnc.global_system_config_read(id=gsc_uuid) >> [(x.name, x.pattern) for x in gsc.user_defined_log_statistics.statlist] [('HostnameCounter', 'dummy'), ('MyIp', '10.84.14.38'), ('Foo', 'Ba.*r')]
Implementação da estatística de log definida pelo usuário
As estatísticas são enviadas como um contador que foi agregado em um período de tempo de 60 segundos.
Uma amostra atual do seu sistema pode ser obtida na UVE em:
http://<analytics-ip>:8081/analytics/uves/user-defined-log-statistic/<name>
Você também pode usar a tabela UserDefinedLogStatTable
de estatísticas para obter dados históricos com todas as agregações suportadas, como SUM, AVG e a like.
O esquema para a tabela está no seguinte local:
http://<ip>:8081/analytics/table/StatTable.UserDefinedCounter.count/schema
Tabela de estatísticas definidas por usuários do Schema
O seguinte é o esquema da tabela de estatística definida pelo usuário:
{ "type": "STAT", "columns": [ { "datatype": "string", "index": true, "name": "Source", "suffixes": null }, { "datatype": "int", "index": false, "name": "T", "suffixes": null }, { "datatype": "int", "index": false, "name": "CLASS(T)", "suffixes": null }, { "datatype": "int", "index": false, "name": "T=", "suffixes": null }, { "datatype": "int", "index": false, "name": "CLASS(T=)", "suffixes": null }, { "datatype": "uuid", "index": false, "name": "UUID", "suffixes": null }, { "datatype": "int", "index": false, "name": "COUNT(count)", "suffixes": null }, { "datatype": "int", "index": false, "name": "count.previous", "suffixes": null }, { "datatype": "int", "index": false, "name": "SUM(count.previous)", "suffixes": null }, { "datatype": "int", "index": false, "name": "CLASS(count.previous)", "suffixes": null }, { "datatype": "int", "index": false, "name": "MAX(count.previous)", "suffixes": null }, { "datatype": "int", "index": false, "name": "MIN(count.previous)", "suffixes": null }, { "datatype": "percentiles", "index": false, "name": "PERCENTILES(count.previous)", "suffixes": null }, { "datatype": "avg", "index": false, "name": "AVG(count.previous)", "suffixes": null }, { "datatype": "string", "index": true, "name": "name", "suffixes": null } ] }