Nova postagem

Rechercher

Artigo
· Maio 24, 2024 5min de leitura

Usando o Prometheus para coletar métricas no Intersystems IRIS

Olá,

Neste artigo vamos ver o uso do Prometheus (prometheus.io) para coletar métricas no Iris, de forma a monitorarmos o ambiente.

O link https://cloud.google.com/discover/what-is-prometheus?hl=pt-br apresenta uma descrição bem completa do Prometheus.

O Iris conta com uma api que disponibiliza uma série de informações do ambiente. A documentação completa da api pode ser encontrada no endereço https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_rest

Uma simples chamada a api já nos mostra as informações disponíveis:

Fig. 1 – Apresentação dos dados da API de Metricas do IRIS

A api segue o padrão definido pela OpenMetrics (openmetrics.io). Podemos usar o Prometheus para fazer a coleta dos dados desta api e então depois visualizar as informações. Na própria documentação da api existe o link para a configuração básica do Prometheus (https://prometheus.io/docs/introduction/first_steps/ ).

Para iniciarmos, baixe o Prometheus para seu ambiente em um diretório. Você pode encontrar o download para seu ambiente no link https://prometheus.io/download/

Descompacte o arquivo e terá o necessário para a execução. Abaixo a tela com o conteúdo do diretório descompactado para o ambiente Windows:

Fig. 2 – Diretório do Prometheus descompactado

Localize o arquivo prometheus.yaml. Ele é o arquivo de configuração para o Prometheus. Abra este arquivo com um editor de texto:

Fig. 3 Arquivo prometheus.yaml

 

No fim do arquivo você verá a configuração de acesso ao Iris que eu já coloquei no meu arquivo.

No caso estamos com o Iris e o Prometheus no mesmo servidor. Em um ambiente produtivo o ideal é que o servidor do Prometheus seja apartado do Iris. Assim caso exista alguma questão no servidor do Iris os dados do Prometheus estarão disponíveis para consultas.

As seguintes linhas foram incluídas no arquivo, na seção scrape_config:

  - job_name: "iris"

    # metrics_path defaults to '/metrics'

    # scheme defaults to 'http'.

    metrics_path: '/api/monitor/metrics'

    static_configs:

      - targets: ["127.0.0.1"]

job_name é o nome dado a configuração no Prometheus

metrics_path é o caminho para a api no servidor Iris

targets é o endereço IP onde o Iris está atendendo as requisições

No caso não estamos usando a api com autenticação de usuários por ser um simples teste, mas caso vá para um ambiente produtivo a autenticação é necessária por conta de segurança. Veja como autenticar uma api no link https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GREST_securing

Para o caso de uso da api com autenticação temos que fornecer, por exemplo para a basic auth o usuário e a senha. Coloque as informações no arquivo de configuração do Prometheus:

  - job_name: "iris"

    # metrics_path defaults to '/metrics'

    # scheme defaults to 'http'.

    metrics_path: '/api/monitor/metrics'

    basic_auth:

       username: 'XXX' # Usuario autorizado a acessar a API

       password: 'XXX' # Senha do usuario

    static_configs:

      - targets: ["127.0.0.1"]

O exemplo acima mostra como configurar o acesso a api usando basic auth.

Após incluir as linhas, salve o arquivo e execute o programa prometheus.exe ou o executável disponibilizado para seu ambiente. No caso do exemplo estamos usando Windows.

Fig. 4 – Tela do Prometheus em execução no Windows

A partir deste momento o Prometheus fica disponível para acesso a partir da porta 9090 do servidor. Podemos acessar e ver a configuração iris do Prometheus acessando o link http://127.0.0.1:9090/targets:

Fig. 5 – Tela do Prometheus ativo apresentando as configurações de acesso

Agora podemos ver os dados já coletados pelo Prometheus no Iris. Por padrão o Prometheus coleta dados a cada minuto, conforme a propriedade scrape_interval da seção global do arquivo de configuração. No caso, para vermos dados de teste, mudei o valor para 10 segundos:

global:

  scrape_interval: 10s # Set the scrape interval to every 10 seconds.

Assim que o Prometheus tenha uma base de informações coletadas podemos visualizar informações com a opção de gráfico. Para isso acesse o link http://127.0.0.1:9090/graph:

Fig. 6 – Tela de apresentação de gráficos do Prometheus

Agora em Expression informe “iris” e veja todas as informações coletadas:

Fig. 7 – Tela do Gráfico com as opções de visualização

Selecione, por exemplo, iris_cpu_usage na lista de opções e depois selecione a aba Graph. Você já verá o gráfico de uso de CPU desde o momento de ativação do Prometheus:

Fig. 8 - Tela do Prometheus apresentando um gráfico

Você pode explorar selecionando outras opções para visualização. Veja por exemplo iris_glo_ref_per_sec que na documentação da api nos informa trazer as informações de Número de referências a globais localizadas em bancos de dados locais por segundo:

Fig .9 – Apresentação do gráfico de referencia a globais por segundo

O interessante deste monitoramento não é somente podermos acompanhar a saúde do ambiente, mas também verificar o que ocorreu em determinados momentos. Podemos solicitar a visualização dos dados de momentos anteriores a partir da tela de apresentação:

Fig. 10 - Tela de Prometheus selecionando uma data

Caso necessário, marque a caixa Use local time para ajustar o horário para sua zona de tempo.

Explore as informações do Prometheus e veja toda a gama de métricas que são disponibilizadas pelo Iris.

No próximo artigo veremos como ligar o Grafana ao Prometheus para montar um dashboard de visualização das informações coletadas.

Agradeço a @Mikhail Khomenko e seu artigo sobre esse assunto publicado em https://community.intersystems.com/post/making-prometheus-monitoring-intersystems-iris-and-cach%C3%A9 de onde retirei informações importantes para a montagem deste documento. Não deixem de ver este excelente artigo.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Maio 24, 2024 2min de leitura

Reviews on Open Exchange - #45

If one of your packages on OEX receives a review you get notified by OEX only of YOUR own package.   
The rating reflects the experience of the reviewer with the status found at the time of review.   
It is kind of a snapshot and might have changed meanwhile.   
Reviews by other members of the community are marked by * in the last column.

I also placed a bunch of Pull Requests on GitHub when I found a problem I could fix.    
Some were accepted and merged, and some were just ignored.     
So if you made a major change and expect a changed review just let me know.

# Package Review Stars IPM Docker *
1 CSPFileViewDownload Docker availale IPM ready 5.0   y  
2 System-Alerts Interesting example 5.0   y  
3 Cogs JSON Class now also with Docker 5.0   y  
4 CosNumberTranslate Docker was added 5.0   y  
5 Debug Stack Docker working, IPM prepared 5.0   y  
6 DynamicObject Adapter Docker working, IPM prepared 5.0   y  
7 Object Synchronization ready to use with Docker 5.0   y  
8 Objectscript Roman Numeral Converter Docker now available 5.0   y  
9 SpatialIndex more comfort now with Docker 5.0   y  
10 String Datatype - Regular Expression Docker working, IPM prepared 5.0   y  
11 SystemMethodsRemover refreshed with Docker 5.0   y  
12 Metrics example finally arrived in Docker 4.5   y  
13 iris-angular-template a personal experience 4.0 y y  
3 Comments
Discussão (3)2
Entre ou crie uma conta para continuar
Artigo
· Maio 24, 2024 15min de leitura

VIP in GCP

If you're running IRIS in a mirrored configuration for HA in GCP, the question of providing a Mirror VIP (Virtual IP) becomes relevant. Virtual IP offers a way for downstream systems to interact with IRIS using one IP address. Even when a failover happens, downstream systems can reconnect to the same IP address and continue working.

The main issue, when deploying to GCP, is that an IRIS VIP has a requirement of IRIS being essentially a network admin, per the docs.

To get HA, IRIS mirror members must be deployed to different availability zones in one subnet (which is possible in GCP as subnets always span the entire region). One of the solutions might be load balancers, but they, of course, cost extra, and you need to administrate them.

In this article, I would like to provide a way to configure a Mirror VIP without using Load Balancers suggested in most other GCP reference architectures.

3 Comments
Discussão (3)3
Entre ou crie uma conta para continuar
Discussão
· Maio 24, 2024

Code Golf: Smiley Faces

It's Friday and a long weekend is upon us, so let's have a round of code golf!

Nowadays, it's rare to find a text message without at least one emoji. 😃😄😎🙂😊😀😁😆😂
But back in the day, people had to be creative to express their emotions in text. They would use emoticons, which are symbols made up of keyboard characters :^) =] ) B).
Our challenge for today is to create a function that receives a string as argument and returns the total number of smiling faces or happy faces.
Each smiley face must have one smiling mouth, which should be marked with ), ], }, D or >.
A smiley face can have a pair of eyes but it does not have to. Valid characters for eyes are :, ;, 8, B or =.
A nose is optional, and can be represented these characters: -, ^, c, o and ~.

Valid smiley face examples:

    :) :D ;-D :~) :‑) :-] =)    
    :] :-> :> 8-) :D 8‑D )
    8) :-} :} :o) :c) :^) =]
    :‑D 8D =D B^D

Input

"count how many smiley faces are here :)"

Output

1

15 Comments
Discussão (15)2
Entre ou crie uma conta para continuar
Artigo
· Maio 24, 2024 6min de leitura

Studio IRIS AI Studio: Um playground para explorar as capacidades de Generative AI & Vector Embedding

 

Problema

Você se identifica com isso: a capacidade e impacto da tecnologia que é realmente descoberta quando empacotada da maneira correta para seu público alvo? O melhor exemplo seria como a Generative AI deslanchou quando o ChatGPT veio ao público para fácil acesso e não como as capacidades Transformers/RAG's (Retrieval-Augmented Generation - Geração Aumentada de Recuperação) foram identificadas. Pelo menos uma usabilidade muito maior surgiu, quando a audiência foi incentivada para explorar as possibilidades.

 

Motivação

Recentemente tive a oportunidade de participar no MIT (Massachusetts Institute of Technology - Instituto de Tecnologia de Massachusetts) Grand Hack, em Boston, onde, durante minhas conversas com outros participantes, notei o imenso interesse por médicos e veteranos não técnicos em explorar as capacidades de Generative AI em seu domínio. Em uma das conversas, o melhor exemplo, que exibiu como os EHR's (Electronic Health Record - Registro Eletrônico de Saúde) tem uma UI (User Interface - Interface do usuário) complicada quando comparada com a UI polida do ChatGPT. Ainda que elas atendam a diferentes necessidades e tenham cada uma seus prós e contras, minha impressão final foi "O mundo não está voltando para trás, para interfaces complicadas para o usuário ou sistemas lentos. O futuro está em sistemas caracterizados por designs intuitivos e performance otimizada".

Para as partes não técnicas  interessadas que queriam explorar as capacidades do Generative AI, existe uma maneira de fazê-lo sem muitas complicações técnicas. De fato, o Co-lab/Jupyter notebook simplificaram significativamente o processo de rodar um código. Contudo, será podemos melhorar ainda mais isso para assemelhar-se às interfaces de plataformas como Playgrounds OpenAI ou o Studio Azure/Vertex AI? Um ambiente amigável ao usuário como esse encorajaria as partes não técnicas interessadas a entender as capacidades e limitações do Vector DB sem esforço. 

⚡️ Como nós podemos habilitar indivíduos não técnicos a avaliar o potencial do IRIS Vector DV em casos de uso para seus produtos/serviços, sem recursos exaustivos de desenvolvedores?

 

Solução

IRIS AI Studio— Uma plataforma no-code/low-code para explorar as capacidades de incorporações de Vectors no IRIS DB. Um usuário consegue, sem maiores dificuldades, carregar dados de várias fontes como vetores incorporados dentro da IRIS DB e então retornar a informação por meio de diversos canais. Aqui, o carregamento de dados é chamado de Connectors e a parte de retorno pode ser feito pelo Playground. Na essência, o Studio IRIS AI simplifica o processo de trabalhar com vetores incorporados e permite que o usuário visualize o poder da AI sendo cultivada para variadas aplicações. 

Connectors

Nos conectores, o usuário começa escolhendo a fonte de dados de onde querem buscar os dados e e carregar no IRIS DB como vetores incorporados. Eles podem carregar arquivos do sistema local ou devolver informações de serviços de armazenamento em cloud também. Esse recurso tem o potencial de funcionar como um pipeline de dados com a adição das capacidades de uma tarefa CRON.

Inicialmente, eu adicionei 4 fontes de dados diferentes: Armazenamento local, AWS S3, Airtable e Azure Blob Storage.

Após escolher a fonte dos dados, o usuário deve inserir a informação adicional a respeito da conexão, como id do cliente e chave secreta para o armazenamento AWS S3. Então, o usuário pode configurar as incorporações ao escolher tipo de indexação, modelo que deseja usar, dimensões e o nome da tabela em IRIS onde os dados serão carregados. Atualmente, indexações vindas de incorporações de OpenAI e Cohere são suportadas, mas com apenas algumas linhas de código poderíamos adicionar suporte para muitas outras incorporações.

Após finalizar os dois passos, os dados da fonte são convertidos em vetores incorporados e adicionados à tabela IRIS.

Playground

Agora que temos os dados do vetor incorporado na IRIS DB, permitir que o usuário retorne o conteúdo pelo canal preferido pode ser feito pelo Playground. Aqui vão alguns exemplos de como isso é feito.

Na Semantic Search (pesquisa semântica), o usuário insere as configurações que usou para carregar os dados e a pesquisa semântica consulta o que ele quer que seja executado no vetor incorporado. Isso vai retornar conteúdos da IRIS DB e devolver os resultados em formato de linguagem natural.

 

No Chat with Docs (Conversa com Documentos), o usuário deve inserir as configurações que usou para carregar os dados e o chat consulta o que ele quis fazer.  A opção do chat tem uma grande diferença da opção da consulta por causa da extensão do contexto em cada uma. Além disso, na conversa com documentos nós poderáamos conectar com várias opções LLM diferentes para retornar os conteúdos e não precisaríamos nos prender às opções de indexação (Atualmente a OpenAI's GPT 3.5 turbo é adicionada por padrão).]

 

Definições

Na seção de definições, o usuário poderia adicionar múltiplas configurações de instâncias IRIS que serão gravadas no armazenamento local do navegador e o usuário pode escolher com quais vai querer atuar ativamente. Isso fará seu trabalho mais fácil para administrar múltiplas instâncias e escolher as preferidas para uso. Além disso, aqui as chaves de API do serviço LLM  podem ser adicionadas (serão salvas no armazenamento de sessão do navegador) e automaticamente selecionadas para propósitos de indexação ou recuperação de dados. Nenhuma dessas informações está sendo salva e foi levada ao backend apenas para fins de processamento.

 

Teste você mesmo

Clone o repositório do projeto do link do GitHub a seguir: https://github.com/ikram-shah/iris-ai-studio.

Siga as instruções fornecidas para configurar o projeto localmente na sua máquina. Por favor note que, tendo escrito isso em 12 de Maio de 2024 para alguns módulos o desenvolvimento ainda está em progresso, mas a funcionalidade discutida acima deve funcionar perfeitamente 💪🏻 Me avise se algo não funcionar como esperado na DM (Direct Message - mensagem direta) ou na seção de problemas (issues) do GitHub.

Tech Stack

Frontend: VueJS, TailwindCSS, Flowbite

Backend: Python, Flask

Database: InterSystems IRIS

Frameworks/Libraries/Services: Llama-Index, SQLalchemy-iris, OpenAI, Cohere

Infrastructure: Vercel (frontend hosting), Render (backend hosting)

 

Creditos

Agradeço à detalhada documentação sobre Pesquisa de Vetor da InterSystems

Agradeço ao modelo de Pesquisa de Vetor IRIS por simplificar os módulos e capacidades, de@Alvin.Ryanputra 

Agradeço à livraria llama-iris do @Dmitry Maslennikov 

 

Considerações finais e Feedback

Eu venho de um passado de Inovação e Engenharia de Produto, e por mais de um ano eu tenho explorado avanços tecnológicos no setor de saúde, Aqui estou aprendendo mais da comunidade de desenvolvedores ISC e tenho certeza que essa plataforma AI Studio pode ajudar no seu trabalho, e desenvolvedores podem compartilhá-la com administradores de produto ou médicos para que deem suas participações na qualidade dos dados que está sendo retornado e muitos outros casos de uso. Se esse artigo fez sentido para você ou iluminou alguma ideia, por favor deixe uma curtida 👍 e fique à vontade para compartilhar seus pensamentos na seção de comentários abaixo. Eu adoraria me conectar com qualquer um interessado em discutir mais!

🚀 Vote por essa aplicação na competição de Vector Search, GenAI and ML, se acreditar que ela tem futuro!

Eu vou compartilhar mais publicações que dão um mergulho técnico profundo a respeito dessa plataforma.

Discussão (0)1
Entre ou crie uma conta para continuar