Cloud Native sample microservices showcasing Full Stack Observability using AppDynamics and ThousandEyes

Overview

published

Cloud Native Sample Bookinfo App Observability

Bookinfo is a sample application composed of four Microservices written in different languages. Application is originally created by as part of Istio project to demonstrate various Istio features, See https://istio.io/docs/examples/bookinfo/.

Project extends this sample application to demonstrate observability of Cloud Native application using Cisco AppDynamics and ThousandEyes. Microservices code and docker images area extended to include respective AppDynamics agents that enables Application Performance Monitoring for these microservices. ThousandEyes Web App monitoring is also configured, that helps understand understand how HTTP, page load and transaction performance is affected by the network, and how it stacks up against other similar services.

Architecture

Sample book info application is created using 4 polygot microservices & can be deployed on kubernetes cluster.

Microservice details

Service Name Language Details
Product Page Python Frontend Microservices service simple web page showing book details, reviews & ratings
Details Ruby The details microservice contains book information.
Review Java The reviews microservice contains book reviews. It also calls the ratings microservice.
Ratings NodeJS The ratings microservice contains book ranking information that accompanies a book review.

Full Stack Observability are enabled for this application (composed of microservices) that monitors user experience, business transaction, container, virtual machine, Kubernetes container orchestrator etc. Each Microservices is instrumented with respective language AppDynamics agent to enable application monitoring data. In addition to this AppD cluster agent for Kubernetes is also setup too to monitor health of Kubernetes and collect metrics and metadata for entire cluster, including every node and container.

For ProductPage web endpoints the HTTP monitor are added to ThousandEyes that can monitor Response time, Availability and Throughput from multiple from different geographic location in world.

Setup Application

  1. Pre-requisite
  1. Clone the code to local laptop

    git clone https://github.com/CiscoDevNet/bookinfo-cloudnative-sample
    
  2. Get Access Key and account details from AppDynamics

    Access keys & Account Name

  3. Update Access Keys and deploy microservices pods

    i. Modify access-key (base64 encoded), APPDYNAMICS_AGENT_ACCOUNT_NAME (account_name) and APPDYNAMICS_CONTROLLER_HOST_NAME in field

    echo -n  | base64 - 
    vi platform/kube/appd.yaml
    

    ii. Upload Secret

    kubectl apply -f platform/kube/appd.yaml
    

    iii. Deploy microservice pods & created services

    kubectl apply -f platform/kube/bookinfo.yaml
    

    Sample Creation

    iv. Expose service to internet If your cluster have ingress with public internet domain configured use same.

    Alternative option is to expose service using ngork. Service needs to exposed so that ThousandEye can test app. NOTE: This is will expose your app to world so please read yourself aware of ngrok.

    kubectl run --restart=Never   -t -i --rm   ngrok --image=gcr.io/kuar-demo/ngrok   -- http productpage:9080
    
  4. Access app, browse various page & login using 'demo' and 'demo' cred.

    This will start sending metrics to AppdAccount

    Application Browsing

  5. Check Application and Infra monitoring details in AppDynamics account

    AppDynamics Monitoring Details

  6. Register Web Test on ThousandEyes

    ThousandEyes Test Addition & reports

AppDynamic Agents Instrumentation of Microservices

  1. Python agent for 'Product Page'

    AppDynamics Agent for Python is installed using pip package via requirements.txt

  2. Ruby agent for 'Details Service'

    AppDynamics Agent for Ruby is installed using Gemfile

  3. Java agent for 'Review' Service

    AppDynamics agent for Java is inserted using init-container.

          initContainers:
         - command:
             - cp
             - -r
             - /opt/appdynamics/.
             - /opt/temp
           name: appd-agent
           image: docker.io/appdynamics/java-agent:20.8.0
           volumeMounts:
             - mountPath: /opt/temp
               name: appd-agent-repo
    
  4. NodeJS 'Rating' Service AppDynamics agent for NodeJS are installed using npm install in package.json

  5. Agent configuration are set for following AppDynamics agents configuration Best Practices in kubernetes refer appd.yaml and bookinfo.yaml for details.

Rebuild Microservices docker images

Refer Build Document for build instruction.

Owner
Cisco DevNet
Place for DevNet community to access sample code and collaborate on open source projects that are used in some way in DevNet
Cisco DevNet
Simple macOS StatusBar app to remind you to unplug your laptop when sufficiently charged

ChargeMon Simple macOS StatusBar app to monitor battery charge status and remind you to unplug your Mac when the battery is sufficiently charged Overv

Rhet Turnbull 5 Jan 25, 2022
Python 100daysofcode

#python #100daysofcode Python is a simple, general purpose ,high level & object-oriented programming language even it's is interpreted scripting langu

Tara 1 Feb 10, 2022
Practice in Oxford_AI&ML class

Practice in Oxford_AI&ML class

St3ve Lee 2 Feb 04, 2022
Create a simple program by applying the use of class

TUGAS PRAKTIKUM 8 💻 Nama : Achmad Mahfud NIM : 312110520 Kelas : TI.21.C5 Perintah : Buat program sederhana dengan mengaplikasikan pengguna

Achmad Mahfud 1 Dec 23, 2021
Clock in automatically in SCU.

auto_clock_in Clock in automatically in SCU. Features send logs to Telegram bot How to use? pip install -r requirements.txt () edit user_list, token_A

2 Dec 13, 2021
Junos PyEZ is a Python library to remotely manage/automate Junos devices.

The repo is under active development. If you take a clone, you are getting the latest, and perhaps not entirely stable code. DOCUMENTATION Official Do

Juniper Networks 623 Dec 10, 2022
A Powerful Tool For Making Combo List(All possible modes)

ComboMaker A Powerful Tool For Making Combo List Introduction Check out all possible Combo list build modes with this tool =) How to Install Open the

MasterBurnt 7 Jan 07, 2023
Thumbor-bootcamp - learning and contribution experience with ❤️ and 🤗 from the thumbor team

Thumbor-bootcamp - learning and contribution experience with ❤️ and 🤗 from the thumbor team

Thumbor (by @globocom) 9 Jul 11, 2022
A platform for developers 👩‍💻 who wants to share their programs and projects.

Fest-Practice-2021 This project is excluded from Hacktoberfest 2021. Please use this as a testing repo/project. A platform for developers 👩‍💻 who wa

Mayank Choudhary 40 Nov 07, 2022
Fastest Semantle solver this side of the Mississippi

semantle Fastest Semantle solver this side of the Mississippi. Roughly 3 average turns to win Measured against (part of) the word2vec-google-news-300

Frank Odom 8 Dec 26, 2022
Simple cash register system made with guizero

Eje-Casher なにこれ guizeroで作った簡易レジシステムです。実際にコミケで使う予定です。 これを誰かがそのまま使うかどうかというよりは、guiz

Akira Ouchi 4 Nov 07, 2022
2 Way Sync Between Notion Database and Google Calendar

Notion-and-Google-Calendar-2-Way-Sync 2 Way Sync Between a Notion Database and Google Calendar WARNING: This repo will be undergoing a good bit of cha

248 Dec 26, 2022
DG - A(n) (unusual) programming language

DG - A(n) (unusual) programming language General structure There are no infix-operators (i.e. 1 + 1) Each operator takes 2 parameters When there are m

1 Mar 05, 2022
This repository requires you to solve a problem by writing some basic python code.

Can You Solve a Problem? A beginner friendly repository that requires you to solve familiar problems with python. This could be as simple as implement

Precious Kolawole 11 Nov 30, 2022
Providing a working, flexible, easier and faster installer than the one officially provided by Arch Linux

Purpose The purpose is to bring more people to Arch Linux by providing a working, flexible, easier and faster installer than the one officially provid

André Luís 0 Nov 09, 2022
MiniJVM is simple java virtual machine written by python language, it can load class file from file system and run it.

MiniJVM MiniJVM是一款使用python编写的简易JVM,能够从本地加载class文件并且执行绝大多数指令。 支持的功能 1.从本地磁盘加载class并解析 2.支持绝大多数指令集的执行 3.支持虚拟机内存分区以及对象的创建 4.支持方法的调用和参数传递 5.支持静态代码块的初始化 不支

keguoyu 60 Apr 01, 2022
A web-based chat application that enables multiple users to interact with one another

A web-based chat application that enables multiple users to interact with one another, in the same chat room or different ones according to their choosing.

3 Apr 22, 2022
Library for RadiaCode-101

RadiaCode Библиотека для работы с дозиметром RadiaCode-101, находится в разработке - API не стабилен и возможны изменения. Пример использования (backe

Maxim Andreev 56 Nov 29, 2022
Scientific color maps and standardization tools

Scicomap is a package that provides scientific color maps and tools to standardize your favourite color maps if you don't like the built-in ones. Scicomap currently provides sequential, bi-sequential

Thomas Bury 14 Nov 30, 2022
A Python software implementation of the Intel 4004 processor

Pyntel4004 A Python software implementation of the Intel 4004 processor. General Information Two pass assembler using the original mnemonics, directiv

alshapton 5 Oct 01, 2022