Sunday 23 July 2017

Média Móvel Rrdtool


Rrdgraphexamples Deslocar os dados em uma semana (604800 segundos) Se os RRAs de função especializada existem para detecção de comportamento aberrante, eles podem ser usados ​​para gerar o gráfico de uma série de tempo com bandas de confiança e falhas. Este exemplo gera um gráfico da série de dados em azul (LINE2 com a fonte de dados virtual scaledobs), limites de confiança em fontes de dados virtuais vermelhas (scaledupper e scaledlower) e falhas potenciais (ou seja, comportamento aberrante aberrante potencial) marcadas por linhas amarelas verticais ( A fonte de dados de falha). Os dados brutos provêm de uma RRA MÉDIA. A melhor resolução das séries temporais observadas (um ponto de dados consolidado por ponto de dados primário). Os valores previstos (ou suavizados) são armazenados no RW HWPREDICT. Os valores de desvios preditos (pensar desvio padrão) são armazenados no RRA DEVPREDICT. Finalmente, o FALHAS RRA contém indicadores, com 1 indicando uma falha potencial. Todos os dados são redimensionados para bits (em vez de octetos), multiplicando-se por 8. Os limites de confiança são calculados por um deslocamento de 2 desvios acima e abaixo dos valores previstos (os CDEFs superiores e inferiores). As linhas verticais indicadas que as falhas potenciais são representadas graficamente através do elemento do gráfico TICK, que converte valores não-zero em um RRA em marcações. Aqui, um argumento de fração de eixo de 1,0 significa que as marcas de controle abrangem todo o eixo y e, portanto, tornam-se linhas verticais no gráfico. A escolha de 2 desvios (um fator de escala) corresponde ao padrão usado internamente pelo FRA. RRA. Se o valor interno for alterado (veja rrdtune), este comando gráfico deve ser alterado para ser consistente. O comando rrdtool graph é projetado para traçar dados em uma resolução temporal especificada, independentemente da efetiva resolução dos dados no arquivo RRD. Isso pode apresentar um problema para as funções de consolidação especializadas que mantêm um mapeamento um-para-um entre pontos de dados primários e pontos de dados consolidados. Se um gráfico insiste em ver o conteúdo desses RRAs em uma escala temporal mais grosseira, o comando do gráfico tenta fazer algo inteligente, mas as faixas de confiança e as falhas já não têm o mesmo significado e podem ser enganosas. O rrdgraph fornece uma visão geral de como o rrdtool funciona. Rrdgraphdata descreve detalhadamente DEF, CDEF e VDEF. Rrdgraphrpn descreve o idioma RPN usado nas instruções xDEF. A página rrdgraphgraph descreve todas as funções gráficas e de impressão. Programa de Tobias Oetiker 60tobioetiker. ch62 Esta página de manual de Alex van den Bogaerdt 60alexvandenbogaerdt. nl62 com correções e complementos de várias pessoasNotas sobre a implementação de RRDTOOL de Aberrante Behavior Detection oetikerwebtoolsrrdtool) é o acrônimo de Round Robin Database. RRD é um sistema para armazenar e exibir dados de séries temporais. Ele armazena os dados de uma maneira muito compacta que não se expandirá ao longo do tempo, e apresenta gráficos úteis ao processar os dados em diferentes resoluções temporais. O software RRDtool está disponível como um aplicativo autônomo ou como uma biblioteca PERL. RRDtool é um programa ágil que minimiza as operações de IO exigidas por atualizações em tempo real para séries temporais. Embora não seja tão poderoso quanto o software de banco de dados completo, ele fornece a funcionalidade exigida por um ambiente em tempo real: conversão de atualizações em intervalos irregulares em intervalos regulares através de conversão de interpolação linear de dados de contador para agregação de taxas em intervalos de tempo definidos pelo usuário via Múltiplas funções de agregação Este documento descreve a implementação de detecção de comportamento aberrante para RRDTOOL. É assumida alguma familiaridade com os internos da versão atual (1.0.25) do RRDtool, pois este documento faz referência à arquitetura pré-existente. Existem várias razões pelas quais o suporte à detecção de comportamento aberrante foi integrado no RRDtool, ao contrário de implementado como um programa separado. Estes incluem: (1) Facilita a aplicação eficaz em tempo real da detecção de comportamento aberrante. A integração oferece uma maior eficiência em relação a um programa externo em relação ao acesso à IO. Um programa externo teria obtido dados de RRD na mesma freqüência de atualização, enquanto o código dentro do RRD opera com esses dados já em memória. A eficiência torna-se uma prioridade máxima para a rede de serviços no nível IAPISP, onde RRDtool pode ser parte essencial do sistema de monitoramento de centenas de interfaces de rede e serviços de aplicativos. (2) Aproveita a habilidade do RRDtool para executar a interpolação temporal (atualizações de dados em intervalos irregulares) e a conversão de contadores em taxas. (3) Aproveita as capacidades gráficas do RRDtool. Os gráficos podem ser gerados para exibir os resultados da detecção de comportamento aberrante usando as capacidades existentes do RRDtool. (4) Aproveita o software cliente projetado para executar com RRDtool (ou seja, Cricket). A detecção de comportamento aberrante é decomposta em três peças, cada edifício em seu antecessor: (1) Um algoritmo para prever os valores de uma série de tempo uma vez no futuro. (2) Uma medida do desvio entre os valores previstos e os valores observados. (3) Um mecanismo para decidir se e quando um valor ou sequência observada de valores observados é muito desviante do (s) valor (s) previsto (s). O algoritmo de previsão de séries temporais de Holt-Winters é um algoritmo on-line ou incremental que prevê previsões adaptativas em uma série temporal. Sua previsão é a soma de três componentes: uma linha de base (ou intercepção), uma tendência linear ao longo do tempo (ou inclinação) e um coeficiente sazonal (um efeito periódico, como um ciclo diário). Existe um coeficiente sazonal para cada ponto do tempo no período (ciclo). Depois de um valor ser observado, cada um desses componentes é atualizado através de suavização exponencial. O algoritmo aprende dos valores passados ​​e usa-os para prever o futuro. A taxa de adaptação é regida por 3 parâmetros: alfa (interceptação), beta (inclinação) e gama (sazonal). A previsão também pode ser vista como um valor suavizado para as séries temporais. A medida do desvio é um desvio absoluto ponderado sazonal. O termo desvio de meios sazonais é medido separadamente para cada ponto de tempo no ciclo sazonal. Tal como acontece com a Previsão de Holt-Winters, o desvio é previsto usando a medida calculada a partir de valores passados ​​(mas apenas nesse momento no ciclo sazonal). Depois que o valor é observado, o algoritmo aprende do valor observado através de suavização exponencial. Escalar a seqüência de valores de desvio previstos para a série temporal observada gera bandas de confiança (geralmente pensamos nas seqüências como linhas contínuas e não como um conjunto de pontos discretos). O comportamento aberrante (uma falha potencial) é relatado sempre que o número de vezes que o valor observado viola as bandas de confiança atende ou excede um limite especificado dentro de uma janela temporal especificada (ou seja, 5 violações nos últimos 45 minutos com um valor observado a cada 5 mintuos). Esta seção descreve a arquitetura da implementação da detecção de comportamento aberrante no RRDtool. No disco, o banco de dados round robin (RRD) é organizado em seções seqüenciais, arquivos round robin (RRA). Dentro de cada RRA é uma seção para cada uma das fontes de dados (entrada) armazenadas neste RRD. Cada RRA é definido por uma função de consolidação que mapeia pontos de dados primários (PDP) para pontos de dados consolidados (CDP). Em outro nível, um RRA é apenas uma série de valores de dados atualizados em seqüência de acordo com alguma função em algum intervalo de tempo fixo. Em seu rosto, o algoritmo de comportamento aberrante precisa de pelo menos dois arrays, um para armazenar os valores de previsão correspondentes a cada ponto de dados primário e um segundo para armazenar o desvio previsto correspondente a cada ponto de dados primário. Conforme implementado, os coeficientes e desvios sazonais que são usados ​​para calcular a previsão e os desvios previstos são armazenados em um segundo par de RRAs. Esses arrays têm comprimento igual ao período sazonal e são atualizados uma vez para cada ponto de dados primário. As falhas são rastreadas por uma quinta RRA, que determina violações e falhas em cada chamada para atualização RRD. Os coeficientes de interceptação e inclinação necessários para a previsão são atualizados para cada ponto de dados primário e são únicos para cada fonte de dados (DS). Eles poderiam ser armazenados em um segundo par de RRAs. No entanto, apenas o valor mais recente de cada um é necessário para uma determinada previsão. Conforme implementado, esses parâmetros são armazenados em um buffer temporário no cabeçalho alocado para cada combinação de fonte de dados RRA no RRD (a área de preparação de CDP). Este buffer é liberado de volta para o disco em cada chamada para atualização RRD. Os parâmetros de adaptação são fixados para a vida do RRA e são os mesmos para todas as fontes de dados dentro desse RRA. Eles são armazenados no buffer de parâmetro RRA (em RRA def), que é lido somente durante a atualização RRD. Portanto, a implementação do algoritmo de comportamento aberrante adiciona cinco novas funções de consolidação ao RRDtool: (1) HWPREDICT: uma série de previsões calculadas pelo algoritmo Holt-Winters, um para cada ponto de dados primário. A matriz HWPREDICT depende de uma matriz de tipo SEASONAL para pesquisa de coeficientes sazonais. O índice desta matriz SEASONAL é armazenado como um parâmetro do HWPREDICT RRA. (2) TEMÁTICA: uma série de coeficientes sazonais com comprimento igual ao período sazonal. Para cada ponto de dados primário, existe um coeficiente sazonal que corresponde ao índice no ciclo sazonal. Para atualizar os coeficientes sazonais através de suavização exponencial, o RAS SEASONAL depende do RW HWPREDICT. O índice do RW HWPREDICT correspondente é armazenado como um parâmetro. (3) DEVPREDICT: uma série de previsões de desvio. Essencialmente, DEVPREDICT copia valores da matriz DEVSEASONAL, ele não processa por conta própria. O índice da matriz DEVSEASONAL é armazenado como um parâmetro. (4) DEVSEASONAL: uma série de desvios sazonais. Para cada ponto de dados primário, há um desvio sazonal que corresponde ao índice do ponto de dados primário no ciclo sazonal. Para calcular desvios, DEVSEASONAL RRA deve ser capaz de calcular o valor previsto e, portanto, depende do HWPREDICT RRA. O índice do RW HWPREDICT correspondente é armazenado como um parâmetro. (5) FALHAS: uma série de indicadores booleanos, um 1 indicando uma falha. O buffer RRA-DS armazena cada valor dentro da janela. Cada atualização remove o valor mais antigo desse buffer e insere a nova observação. Em cada atualização, o número de violações é recalculado. O comprimento máximo da janela executado por este buffer é 9 pontos de tempo. Para comparação com desvios, o RAL DE FALHAS depende do RRA DEVSEASONAL. O índice do RVA DEVSEASONAL correspondente é armazenado como um parâmetro. Esta seção ilustra como usar o algoritmo de detecção de comportamento aberrante no RRDtool através de um exemplo. Nosso alvo de monitoramento será uma interface de roteador em um link entre dois centros de dados na rede de serviços de produção da WebTV. A variável será a taxa de banda passante (em Mbps). O uso da largura de banda segue um ciclo diário e SNMP é entrevistado em intervalos de cinco minutos. O primeiro passo é criar um RRD para este destino com detecção de comportamento aberrante habilitada. A fim de simplificar a criação para o usuário novato, além de apoiar a criação explícita de HWPREDICT, SEASONAL, DEVPREDICT, DEVSEASONAL e FAILURES RRA, o comando RRDtool criativo aprimorado suporta a criação implícita dos outros quatro quando HWPREDICT é especificado sozinho. Para tirar proveito disto, use a seguinte sintaxe: ltarray lengthgt é o número de previsões a serem armazenadas antes do encerramento, este número deve ser maior do que o período sazonal. Esse valor também será a contagem de linhas RRA para DEVPREDICT RRA. Ltalphagt é o parâmetro de adaptação de intercepção, que deve cair entre 0 e 1. Um valor maior significa que a intercepção se adapta mais rapidamente. O mesmo valor também será usado para gama. Ltbetagt é o parâmetro de adaptação da inclinação, novamente entre 0 e 1. ltperiodgt é o número de pontos de dados primários no período sazonal. Esse valor será a contagem de RRA para as RRAES SAVÁVEIS e ESTACIONÁRIAS. O uso desta opção cria o RRA FALHAS com o comprimento de janela padrão de 9 e um valor de limite padrão de 7. O comprimento padrão do FRAÇÕES RRA é um período. Para o exemplo, o comando create é: rrdtool create monitor. rrd s 300 Ao criar explicitamente os RRAs adicionais é um meio de controle mais fino, alguns parâmetros podem ser alterados usando o comando tune. O RRDtool aprimorado suporta várias novas sinalizadores de sintonia: - comprimento da janela - limiar de falha --afe - deltapos da gama gama --deltaneg Cada uma dessas bandeiras toma um único argumento. O objetivo do argumento é auto-evidente. O sinalizador --gamma redefinirá o parâmetro de adaptação para os RAS SEASONAL e DEVSEASONAL (configurando ambos para o mesmo valor). --deltapos e deltaneg definem o parâmetro de escala para a banda de confiança superior e inferior, respectivamente, o valor padrão para ambos é 2 (uma faixa de confiança simétrica). Por exemplo, suponha que não estivéssemos infeliz com o comprimento e o limite de janela padrão para o RRA FAILURES, criado implicitamente pelo comando anterior. Emita o comando: rrdtool tune monitor. rrd --window-length 5 O restante do exemplo usa o comprimento de janela padrão de 9 e o limite padrão de 7. Em alguns casos, é necessária a criação explícita das RRAs. Suponha que o técnico de rede só esteja interessado em suavizar as séries temporais observadas, não bandas de confiança ou detecção de comportamento aberrante. O algoritmo Holt-Winters Forecasting pode ser visto como um algoritmo de suavização. Nesse caso, ele pode criar explicitamente os RRAs HWPREDICT e SEASONAL sem os outros. Use esta sintaxe: RRA: HWPREDICT: ltlengthgt: ltalphagt: ltbetagon: ltperiodgt: ltindex of SEASONALgt RRA: SEASONAL: ltperiodgt: ltgammagt: ltindex de HWPREDICTgt Os argumentos de HWPREDICT são os mesmos que antes, com a adição de: ltindex de SEASONALgt 1- Índice baseado na matriz SEASONAL na ordem, os RRAs são especificados no comando create. Os argumentos do RAS SEASONAL são: ltperiodgt é o número de pontos de dados primários no período sazonal. Ele deve corresponder ao valor especificado pelo argumento ltperiodgt de HWPREDICT. Deve ser um número inteiro superior a 2. ltgammagt é o parâmetro de adaptação para coeficientes sazonais, que deve valorizar entre 0 e 1. Ltindex do índice HWPREDICTgt 1 da matriz HWPREDICT na ordem. As RRAs são especificadas no comando create As bandas de Confiança podem Seja criado independentemente da detecção de comportamento aberrante. Nesse caso, crie os quatro RRAs HWPREDICT, SEASONAL, DEVSEASONAL e DEVPREDICT, mas omite o RRA FALL. Use esta sintaxe: RRA: HWPREDICT: ltlengthgt: ltalphagt: ltbetagt: ltperiodgt: ltindex of SEASONALgt RRA: SEASONAL: ltperiodgt: ltgammagt: ltindex de HWPREDICTgt RRA: DEVSEASONAL: ltperiodgt: ltgammagt: ltindex de HWPREDICTgt RRA: DEVPREDICT: ltarray lengthgt: ltindex of DEVSEASONALgt Os argumentos de HWPREDICT e SEASONAL são os mesmos que antes. Os argumentos de DEVSEASONAL e DEVPREDICT são: ltperiodgt é o número de pontos de dados primários no período sazonal. Ele deve corresponder ao valor especificado pelo argumento ltperiodgt dos arrays HWPREDICT e SEASONAL (esta restrição pode ser levantada em uma implementação futura). Deve ser um número inteiro maior do que 2. O comprimento do ltarray é o número de desvios a armazenar antes de encerrar esse número deve ser maior do que o período sazonal. Ltgammagt é o parâmetro de adaptação para desvios sazonais, que deve valorizar entre 0 e 1. Não é necessário combinar o parâmetro de adaptação para a matriz SEASONAL. Ltindex do índice baseado em HWPREDICTgt 1 da matriz HWPREDICT na ordem, os RRAs são especificados no comando create ltindex do índice baseado em DEVSEASONALgt 1 da matriz DEVSEASONAL na ordem. As RRAs são especificadas no comando create Finalmente, o RRA FAILURES pode ser criado Explicitamente com a sintaxe, mas, no mínimo, as matrizes HWPREDICT, SEASONAL e DEVSEASONAL também devem ser criadas. Se as bandas de confiança também são desejadas, crie DEVPREDICT. Use esta sintaxe: RRA: FALHAS: ltlengthgt: ltthresholdgt: ltwindow lengthgt: ltindex de DEVSEASONALgt ltlengthgt é o número de indicadores (0,1 valores) para armazenar antes do envolvimento. A 1 indica uma falha: ou seja, o número de violações na última janela de observações atende ou excede o limite. Ltthresholdgt é o número mínimo de violações dentro de uma janela (valores observados fora dos limites de confiança) que constitui uma falha. Ltwindow lengthgt é o número de pontos de tempo na janela. Especifique um inteiro maior ou igual ao limite e menor ou igual a 28 (o valor máximo). Ltindex do índice DEVSEASONALgt baseado em 1 da matriz DEVSEASONAL na ordem, os RRAs são especificados no comando create. O algoritmo de detecção de comportamento aberrante não requer nada incomum para o comando de atualização RRDtool, de modo que o mecanismo de coleta (ou seja, o Cricket invocando SNMP) será executado normalmente. Agora suponha que algum tempo tenha passado e o técnico de rede esteja monitorando a largura de banda de saída na interface do roteador. Ele pode visualizar um gráfico da atividade diária, incluindo bandas de confiança e quaisquer falhas, com o seguinte comando: rrdtool graph example. gif TICK: failffffa0: 1.0: Falhas Média de bits para fora LINE2: scaledobs0000ff: bits médios para fora LINE1: scaledupperff0000: Média de limite superior Bits para fora LINE1: scaledlowerff0000: Lower Bound Average bit out TICK é uma nova opção gráfica na ferramenta RRD. Para cada valor não-zero no argumento DEF ou CDEF, ele representa uma marca. O comprimento da marca (linha) é especificado pelo terceiro argumento (após o código de cores) como uma porcentagem decimal do eixo y. 1.0 é 100 do comprimento do eixo y, de modo que a marca de seleção se torna uma linha vertical no gráfico. Aqui está um exemplo deste gráfico diário gerado em Wed, 31 de maio de 2000 para o destino do roteador descrito anteriormente: As linhas vermelhas finas são as bandas de confiança e as barras amarelas representam falhas (na verdade, várias falhas em sequência depois de o valor observado ficar fora da confiança As bandas permanecem fora das bandas por cerca de um período de duas horas em ambos os casos). A opção de gráfico TICK gerou as barras amarelas do FRA. RRA. O gráfico sugere que a largura de banda neste link de saída está aumentando mais rápido do que o esperado pelo modelo (histórico passado). Cabe ao técnico da rede decidir se isso representa um comportamento aberrante de interesse. Uma abordagem que o técnico pode levar é ver a série temporal para esta interface do roteador durante um período de tempo mais longo. Com retrospectiva, é fácil demonstrar que algo incomum está acontecendo e o modelo de detecção de comportamento aberrante o está pegando em tempo real. Aqui está a série temporal para a semana e meia do período de 24 de maio de 2000 a 2 de junho de 2000: é claro que o dia 31 de maio é incomum. A largura de banda aumenta em duas etapas: uma vez no início da manhã e novamente no início da tarde. Nesse caso, o mergulho para 0 na manhã cedo e o salto subsequente podem ser atribuídos a um tempo de inatividade programado para a rede de serviços. Talvez o restante da atividade de largura de banda no Wed tenha a mesma causa, caso em que o comportamento aberrante detectado é um falso positivo nos olhos do técnico da rede. Dado o exemplo, é claro que existem muitos benefícios da detecção de comportamento aberrante, mas complica a implementação do software e impacta o desempenho em tempo de execução. Esses detalhes são discutidos nesta seção. Para os cinco RRAs de detecção aberrantes, cada vez que um ponto de dados primário (PDP) é calculado pelo rrdupdate, cada um dos RRAs é atualizado. Isso se traduz em cinco operações de buscas de disco adicionais. Além disso, as RRA SEASONAL e DEVSEASONAL requerem uma operação de busca. Embora o número de operações de disco adicionais seja independente do número de fontes de dados e essas operações são realizadas sequencialmente sempre que possível (ou seja, busca evita mover para trás dentro do arquivo), essas operações adicionam custo significativo de IO em relação a um RRD sem as RRA de detecção aberrantes . Em um arquivo RRD convencional, geralmente há apenas um RRA que é atualizado para cada PDP, exigindo apenas uma única operação seekwrite. Após a atualização, as áreas de CDpprep dos RRA HWPREDICT e SEASONAL contêm informações suficientes para fazer uma previsão de valores futuros. O próximo valor previsto pode ser calculado usando a seguinte fórmula: Inclinação de interdição de predição (comprimento da seqüência de valores desconhecidos 1) A interceptação é armazenada no membro CDPhwintercept da área cdpprep do RW HWPREDICT e a fonte de dados de interesse. A inclinação é armazenada no membro CDPhwslope da área cdpprep do HWPREDICT RRA. A expressão, (comprimento da seqüência de valores desconhecidos 1), é armazenada como o membro CDPnulcount da área cdpprep da RW HWPREDICT. Finalmente, o coeficiente sazonal é armazenado no membro CDPhwasonal da área cdpprep do RAS SEASONAL e a fonte de dados de interesse. A detecção de comportamento aberrante não precisa calcular a predição até que o valor a ser previsto já seja observado, mas é concebível que outra aplicação possa querer a predição antes que o valor seja observado. Isso poderia ser facilitado no futuro, adicionando uma nova chamada, rrdpredict, para ler os buffers apropriados de HWPREDICT e SEASONAL RRAs e calcular a predição. Isolados ou seqüências de valores desconhecidos (U) geralmente não são um problema para o algoritmo Holt-Winters, seja ao fazer previsões ou na atualização de valores (basicamente, por um valor desconhecido, nenhuma atualização ocorre). O algoritmo pode realmente prever múltiplas etapas no futuro, desde que a fase de inicialização esteja completa. Uma atualização em massa pode ocorrer quando um intervalo de tempo entre valores observados excede o tamanho do passo. Nesse caso, o valor observado gera mais de um ponto de dados primário. Se o intervalo exceder o batimento cardíaco de uma fonte de dados, todos os pontos de dados primários intervenientes serão definidos como desconhecidos (U), caso contrário eles serão definidos para o mesmo valor (igual). As atualizações em massa criam uma complicação para os RRAs de detecção aberrantes, que são atualizados para cada ponto de dados primário. O principal problema é o custo da computação da previsão e do desvio previsto. Ao contrário do caso da função de consolidação convencional (ou seja, média ou máxima), os pontos de dados consolidados intermediários (CDPs) para os RRAs de detecção aberrante não são idênticos e devem ser computados separadamente. Este cálculo cai de lado, há problemas de implementação relacionados às interdependências entre os RRAs de detecção aberrantes. Essencialmente, para calcular as previsões e desvios previstos em sequência, cada RRA requer que suas RRAs dependentes sejam sincronizadas (no mesmo ponto de tempo). No entanto, a arquitetura da função rrdupdate é processar cada RRA independentemente dos outros. Essa arquitetura é imposta pela otimização que grava cada RRA ocorrem em sequência. Dado nestes problemas, as atualizações em excesso de 2 CDP por valor observado (ou seja, um valor observado que se traduz em mais de 2 PDPs) não são atualmente suportadas pela implementação de detecção aberrante. Os CDP intermediários são definidos para U. No futuro, a implementação pode suportar atualizações em massa, especialmente porque o algoritmo pode manipular seqüências de valores de U como entrada. A implementação foi projetada para usar a inicialização do bootstrap. O coeficiente de intercepção é inicializado para o primeiro valor conhecido. A inclinação é inicializada para 0, esta inicializada é baseada no pressuposto de que a tendência linear ao longo do tempo é próxima de 0. Se esse não for o caso, o tempo necessário para que o algoritmo Holt-Winters gravite de 0 dependa da adaptação sazonal Parâmetro, gama. Durante o primeiro ciclo sazonal de valores conhecidos, os coeficientes sazonais são inicializados. Durante o segundo ciclo sazonal de valores conhecidos, os desvios sazonais são inicializados. A sensibilidade do algoritmo aos valores iniciais (os dois primeiros ciclos) diminui ao longo do tempo conforme determinado pelos parâmetros de adaptação. O peso do valor inicial persiste mais do que os valores subseqüentes. Por exemplo, dado um ciclo diário, sem alisamento periódico e gama 0,1, o peso do valor inicial no décimo componente sazonal iterativo (dia) é de 0,4. Em contraste, o peso da observação do segundo dia no mesmo ponto do ciclo é de apenas 0,04. Valores desconhecidos durante os dois primeiros ciclos sazonais podem complicar o início a frio. A implementação inicializa os coeficientes que podem ocorrer durante os dois primeiros ciclos. Se alguns coeficientes permanecem desconhecidos devido a valores desconhecidos, eles são inicializados durante o primeiro ciclo subseqüente com valor conhecido nesse ponto de tempo no ciclo. Como o primeiro valor de uma fonte de dados COUNTER é sempre desconhecido, o período mínimo de início frio para fontes de dados COUNTER é três ciclos sazonais. Refletindo a crença de que os coeficientes e desvios sazonais são funções periódicas periódicas do tempo, a implementação executa periodicamente uma média móvel mais suave com uma janela de 5 do período nas RRA DEVSEASONAL e SEASONAL. Esta operação requer a leitura de todos os valores DEVSEASONAL e SEASONAL RRA a partir do disco, atualizando-os e devolvendo-os ao disco. O mais suave é executado uma vez por período, em um deslocamento determinado por um algoritmo de hash FNV no nome do arquivo RRD. A intenção do algoritmo de hashing é evitar a acumulação temporal de operações de suavização para vários arquivos RRD (como RRDTOOL normalmente é executado em um ambiente com múltiplos arquivos RRD). Os parâmetros rradef e as áreas cdpprep fornecidas pela definição da estrutura RRD são suficientes para armazenar todos os parâmetros necessários no disco e na memória para o algoritmo de detecção de comportamento aberrante, anteriormente as funções dump e restore (tofrom XML) não suportavam totalmente o importxport destes estruturas de dados. A implementação agora limpa todos os parâmetros de RRA em XML usando a tag ltparamgt no despejo e a função de restauração lê as novas tags. O conteúdo das áreas cdpprep está escrito como anteriormente, marcado pela tag ltdsgt. Para identificar o novo formato XML, a implementação usa uma versão de 0002. A lista a seguir descreve os arquivos modificados a partir da versão atual (1.0.25) do RRDtool para implementar a detecção de comportamento aberrante: rrdcreate. c. Suporte para a criação de RRAs HWPREDICT, SAZONAL, DEVSEASONAL e DEVPREDICT. Rrddump. c. Suporte para exportar variáveis ​​de rascunho e variáveis ​​de cdpprep. Rrdrestore. c. Suporte para importar variáveis ​​ratchf par e cdpprep scratch. Rrdhw. c. Rotinas principais para atualizar as rotinas de suavização de RRAs Holt-Winters implementação de fila FIFO. Rrdupdate. c. Roteio de chamadas em rrdhw. c conforme apropriado reescrever para atualizações em massa eficientes rrdgraph. c. Adicione o suporte de redução de dados para os RRAs HWPREDICT, SEASONAL, DEVSEASONAL e DEVPREDICT adicionando o elemento do gráfico TICK. Rrdformat. h. Adicione valores de enumeração para referência em arrays RRA e CDP scratch. Rrdtool. h. Protótipos de função, protótipos de método de fila FIFO. Hash32.c. Implementação do hash FNV. Fnv32.h. Arquivo de cabeçalho para rotinas de FNV. Raspberry Pi Sensor de temperatura de 1 fio Fundo do projeto Este projeto foi inspirado quando alguns tubos congelaram no espaço de crawls durante o inverno, quando não estávamos por perto. A idéia é apanhar alguns sensores de temperatura de 1 fio e levá-los com um raspberry pi (RPi), registrar as leituras, fazer uma página da Web rastreando-os e talvez acionar uma luz incandescente no espaço de crawls se a média móvel da temperatura for Abaixo de um limiar para aquecer um pouco, com segurança. Coisas que eu acabei usando: Raspberry Pi (RPi Model-B), Um pequeno estojo de acrílico para o RPi, Um cartão SD para arrancar o RPi (usei 8Gb porque está deitado sem uso), cabo de fita de 26 pinos, Dois 26 Em alguns cabeçalhos que se encaixam em uma extremidade de cabo de fita, uma pequena placa de proto, um resistor de 2k ohm, adaptadores RJ45 a D-sub sem a parte D-sub, algum cabo cat5e de par trançado, RJ45 embreado Termina para o cabo de par trançado, os separadores de par trançado Cat5e. Algumas tomadas fêmeas RJ45 de montagem em superfície, Alguns conectores de punção de trapaça de par trançado, Alguns termômetros de 1 fio DS18S20, (opcional) Termômetro (s) de 1 fio DS18B20 impermeável. (Opcional) Realtek RTL8188CUS adaptador de wifi USB (Edimax EW7811) Uma cauda do interruptor de energia, Tubo termorretráctil, solda. 10k Foot View Um Raspberry Pi é uma placa de tamanho de cartão de crédito que executa o Linux e tem alguns cabeçalhos úteis para fazer coisas. O meu plano com este projeto foi usar os cabeçalhos GPIO do RPi para ler os DS18S20 em intervalos regulares, em seguida, registrar as leituras em algum tipo de banco de dados da série temporal (após a pesquisa eu usei o rrdool e uma interface python para ele). Um cronjob pesquisa as leituras de temperatura a cada minuto. Um cronjob diferente calcula uma média móvel de 10 minutos e pode desencadear as luzes incandescentes. No entanto, um terceiro cronjob acorda a cada hora e conduz alguns gráficos em uma página da Web que são usadas como exibição. Clique na maioria das imagens abaixo para exibições maiores. Selecionando o DS18S20, fiz algumas pesquisas sobre os termômetros de 1 fio e estabeleci-me no DS18S20, principalmente por causa da amplitude de temperatura e precisão. Eles são relativamente caros, infelizmente. Os que eu recebi corroam cerca de 4 cada () (Editar: eles podem ter muito menos dinheiro nos dias de hoje, eu vi 10 por 6 na Amazônia recentemente). Eles podem ser encadeados e devem ser executados por meio de par trançado. Outra opção é comprar o termômetro à prova d'água de 1 fio (link acima), que já está encaixotado em uma caixa de metal impermeável com um cabo preto de 3 pés que corre para ele. Este foi 5 da Amazon quando comprei e funciona na mesma rede de 1 fio que os outros, sem problemas. Tem três fios: redpower, blackground, whitedata. Configurando o RPi, não vou entrar em uma quantidade de detalhes aqui porque você pode encontrar toda essa informação em outros lugares online. O RPi quer inicializar a partir de um cartão SD. Existem várias imagens em que você pode dd no cartão SD, eu escolhi wheezy que parece ter suporte nativo para 1-wire bus fora do cabeçalho GPIO. Uma vez que eu inicializei o RPi, fiquei seguro de que o sshd estava funcionando, liguei um cabo Ethernet e fiz o resto da configuração e codificação de um console mais confortável. RPi GPIO - placa proto - ponte de par trançado O RPi possui um cabeçote de 26 pinos chamado GPIO (uso geral IO). Eu leio que esses pinos são basicamente enganchados diretamente ao microprocessador, então seja muito cuidadoso ao cortá-los por acidente. É fácil de fazer quando você tem fios pendurados e pode arruinar seu RPi. Uma alternativa para usar o cabeçalho GPIO é que você pode obter um pequeno dongle de ponte USB que traz sua rede de 1 fio na porta USB no RPi. Eu decidi usar o material do GPIO embora porque eu sou valente assim. Heres o GPIO pinout: usei um cabo de fita de 26 pinos com um pequeno conector de 26 pinos pressionado para pegar o cabeçalho GPIO. Anexar o conector foi feito no meu sobrador de madeira, com cuidado. Então eu bloqueei alguns fios na outra extremidade do conector e liguei tudo para uma placa de pão para ver se eu poderia voltar a gravar um DS18S20. Tudo funcionou e o RPi teve uma entrada em dispositivos sysbusw1 para o termômetro que eu poderia ler como um arquivo (via gato ou um script python). É o que parece se estiver funcionando (o seu terá um número de série diferente, todos são únicos): o formato exato desses dados está descrito na folha de dados anexada acima. O 0x2a inicial e 0x00 são a carga útil da temperatura como o sinal de aumento de dois estendidos. Felizmente para você e eu, alguém já o converteu a uma temperatura no motorista. Isso é o negócio na segunda linha. Observe que existe um ponto decimal implícito, portanto o acima significa 20.937176C. Basta lembrar de dividir por 1000. Ele também observa o bit crcd1 YES. Se isso terminar com NÃO, o CRC (verificação de redundância cíclica, ou seja, bits de detecção de erro) indica um erro de dados e você deve descartar a leitura e a tentativa. Isto acontece. Eu tinha algumas placas de proto que ficavam por aqui, então eu soldei alguns cabeçalhos que se encaixavam nos conectores de fita. Nem a placa proto nem o cabeçalho foi grande o suficiente para pegar todos os 26 pinos do cabo, mas isso é bom porque tudo o que você precisava na rede de par trançado era uma potência, terra e sinal. Eu originalmente usei o poder do GPIO pin1 (3v), mas depois mudou para GPIO pin2 (5v) porque o documento sobre redes de 1 fio confiáveis ​​recomendava 5v e a folha de dados para o DS18S20 diz que ele pode lidar com até 5v. Para terra usei o GPIO pin9 e para o sinal usei o GPIO pin7 (GPIO 4GPCLK0). Os DS18S20 têm um modo de energia parasitária onde você pode executá-los com apenas dois fios: terra e dados. Os dados têm um resistor pullup para alimentar e fornece corrente suficiente para o chip para executá-lo. Se você fizer isso, você deve aterrar o pino de energia não utilizado no DS18S20. No entanto, não tive muita sorte com isso. Os DS18S20 informariam as temperaturas mais baixas, com mais frequência, quando conectado dessa maneira. Esse confiável documento de rede de 1 fio também diz que, para grandes redes, você deve usar três pinos (poder de execução). Então eu não me enganei com descobrir por que o modo de poder parasítico não funcionou muito. Peguei um D-sub para o adaptador RJ45 e removi a parte D-sub para que eu tivesse apenas oito pinos pendurados pelas costas. Então eu cortei um cabo de par trançado cat5e, apertei uma extremidade sobre ele, liguei-o ao D-sub thingy e usei um multímetro para descobrir quais cores no cabo de par trançado correspondiam a quais cores no D-sub thingy. Na minha configuração, parecia assim: conecte-me D-sub de par trançado cat5e. Você deve verificar o seu próprio caso, se você decidir fazer isso desta forma, porém, porque estou certo de que isso está relacionado apenas à forma como eu crioi cabos de rede (aliás, em A mesma ordem que as cores do par trançado cat5e acima). Based on a diagram at hobby boards about 1-wire networks, I decided to use my twisted pair green wire for 5v power, my greenwhite wire for ground, my blue wire for data and my bluewhite wire for ground. I also hooked orange to GPIO1 and brown to GPIO17 with their pairs (orangewhite and brownwhite) both to ground also. I did this so that I could control far away light switches via a power switch tail or solid state relay later on. Twisting a signal or power wire with ground helps remove interference on the line and will help increase the length of network you can run. I used some hot glue and a zip tie to firmly anchor the D-sub thingy to the proto board and soldered the right pins to the right spots on the board to implement the connections described above. I added a 2k ohm resistor between power and signal and tested it out using a long Ethernet cable with one end cut off and jammed into a breadboard to see if I could still read the thermometer. Heres the final circuit and what it looked like: As you can see I ended up using a 2k ohm resistor instead of the recommended 4.7k ohm resistor, again on the advice of that reliable 1-wire network doc and some threads I had read online about long distance 1-wire networks. That doc defines network weight as the total amount of load (wire, devices) on the network and network radius as the distance between the master (RPi) and the most distant slave (DS18S20). I wanted several DS18S20s and had an idea that my network would need at least 20 meters of cable to do what I wanted. The 1-Wire Network Making the 1-wire network is basically as easy as laying twisted pair cable around wherever you want temperature readings. I chose to use unshielded cat5e twisted pair because I had a roll of it sitting in the closet. First, I took the DS1820s, a short distance of twisted pair cat5e cable, and a RJ45 end and made a little plug-in thermometer. Crimp the end onto the cable then solder the DS1820s three pins to the appropriate color wires on the other side. For me that is DS1820 pin1 (ground) to bluewhite, DS1820 pin2 (data) to blue and DS1820 pin3 (power) to green. I used two sizes of heat-shrink tubing to shield the wires from each other and to encase all the wires in a sheath. Be careful when youre doing this not to pre-shrink your heat shrink tubing by getting the soldering iron too close. Also look at your wires carefully I managed to nick a couple of them when stripping one of the cat5e cables and one of my thermometers would not work until I cut it open and fixed it with some electrical tape. Once you have your plug in thermometers you can run a normal twisted pair network around the area you want to take temperature readings from. I ordered some twisted pair RJ45 splitters online to facilitate this. I dont know if you can use an old hub if you have one and would love to hear. But definitely do not use a switch because my understanding is that a hub operates on the physical layer whereas a switch is aware of data. Dont worry about the bad reviews people give to RJ45 splitters: as best I can tell they are from dumb people who try to use them to wire up Ethernet instead of using a hubswitch. I terminated my runs with modular surface mount RJ45 jacks that I could plug the little thermometers into. Once everything was setup the fun part could begin: writing the code. After some research I found rrdtool. round robin database tool. This is a really neat utility that you can use to create and populate files that store a timeseries of data. It can compute derivative values, populate archive timeseries, and even make graphs of the data for you. And, to boot, there is a simple python interface to it. I also found a pretty good tutorial for using it. To setup the rrdtool on the SD card of the RPi you will need to provide the interval ( --step ) at which youll provide readings, designate one or more data sources, and create one or more RRA (round robin archives). Heres the command I ended up using: This creates three data sources (inside, outside and crawlspace) that can store data values between -50 and 50. All are supposed to be provided once every 60 seconds (--step) and will be considered to be unknown if more than 900 seconds have passed without being set. Values can be stored anytime after the UNIX timestamp passed to --start. Moreover it creates two RRAs one that averages just one datum (so takes the value of each update) and stores it for 525600 generations (1 year). The other averages sixty readings together allowing 25 of the 60 (up to 15) to be unknown and stores 87600 generations. Next, I wrote a simple python utility to poll the temperature of a sensor values and write them into this rrdtool file. Remember to check whether the CRC was valid on your read if its not the data is probably corrupt. This happens sometimes: This thing is called every minute from a cronjob and, as you can see, puts some data into the rrdtool file created above. Since rrdtool can also graph, I created another cronjob that runs once an hour to create a graph image: Heres a script that can wake up as a cronjob, compute the 10 minute moving average temperature, and toggle a light switch by setting GPIO pin 17 high or low. That pin goes out over the twisted pair network on the brown wire and can be fed into a power switch tail or a solid state relay to flip a switch. Remember that the GPIO pins are very low current ( 18ma) so you cant flip a mechanical relay with one of these directly. The wifi adapter I linked about from Edimax works with the RPi and doesnt need a powered USB hub. So I used it to avoid running Ethernet down to where I wanted the 1-Wire network to live. Heres another sample of a temperature graph extracted from the RRD (not live): index. html was last updated 1 January 2017 and is Copyright (C) 2002-2015 by Scott Gasch ( scott. gasch064gmail ).

No comments:

Post a Comment