extend ../_components/base.pug

block pagetitle
    | Tooling 

block css 
    link(rel="stylesheet", href="../css/tooling.css")



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero.innerhero--tooling
        .container.innerhero__cont
            .innerhero__main
                h1.h1.innerhero__h1.
                    Tools And Solutions <br>
                    For Apache Ignite Management <br>
                    And Monitoring
                .innerhero__descr.pt-4.h4.
                    Apache Ignite exposes metrics in&nbsp;JMX and <br>OpenCensus formats. Use a&nbsp;broad range of&nbsp;tools
                img.innerhero__pic.innerhero__pic--tooling(src="/public/img/features/tooling/herobg.svg", alt="")
    // /.innerhero




    section.tooling-leading.container 
        h2.h4 Out-Of-The-Box Solutions
        p.h5.pt-2 Tools developed specifically for Ignite cluster management and monitoring



    section.toolingbox.container
        h2.toolingbox__title.h4.flexi
            img(src="/public/img/features/tooling/icon-apache.svg", alt="")
            span VISOR COMMAND LINE AND CONTROL SCRIPT
        
        .toolingbox__picwrap 
            img(src="/public/img/features/tooling/visor-command-line.png", alt="")
        .toolingbox__bg
            .toolingbox__picdescr.h5.
                Apache Ignite officially supports two command-line tools <br>
                to manage and monitor the cluster:
            .toolvarlist1 
                .toolvarlist1__left
                    h3.toolvarlist1__title Visor Command Line tool
                    .toolvarlist1__list 
                        dl.toolvarlist1__dl
                            dt Get statistics about
                            dd 
                                p – cluster nodes
                                p – compute tasks
                                p – caches
                        dl.toolvarlist1__dl
                            dt Manage the size of your cluster by starting or&nbsp;stopping nodes.
                    .toolvarlist1__more 
                        a.button(href="/use-cases/in-memory-cache.html") Learn more 
                .toolvarlist1__right
                    h3.toolvarlist1__title Control Script
                    p.toolvarlist1__descr An advanced command-line utility. It can  <br>do the following: 
                    .toolvarlist1__list 
                        dl.toolvarlist1__dl
                            dt Change the baseline topology
                        dl.toolvarlist1__dl
                            dt Activate and deactivate the cluster
                        dl.toolvarlist1__dl
                            dt Perform consistency checks of your data and indexes
                        dl.toolvarlist1__dl
                            dt Detect long-running or hanging transactions
                    .toolvarlist1__more 
                        a.button(href="/use-cases/in-memory-cache.html") Learn more
    // /.toolingbox1





    section.toolingbox.container
        h2.toolingbox__title.h4.flexi
            img(src="/public/img/features/tooling/icon-gridgain.svg", alt="")
            span GRIDGAIN CONTROL CENTER
        
        .toolingbox__picwrap 
            img(src="/public/img/features/tooling/grid-gain.png", alt="")
        .toolingbox__bg
            .toolingbox__picdescr.h5.
                GridGain Control Center is a troubleshooting, management <br>
                and monitoring tool created just for Apache Ignite:
            .toolvarlist1.toolvarlist1--simple 
                .toolvarlist1__left
                    .toolvarlist1__list 
                        dl.toolvarlist1__dl
                            dt Debug SQL query performance bottleneck
                        dl.toolvarlist1__dl
                            dt Define custom alerts to track and react on&nbsp;over 200 cluster, node, and storage 
                        dl.toolvarlist1__dl
                            dt Upgrade clusters while in production, with&nbsp;zero downtime
                .toolvarlist1__right
                    .toolvarlist1__list 
                        dl.toolvarlist1__dl
                            dt Trace the performance of your operations under load
                        dl.toolvarlist1__dl
                            dt Proactively manage data skews to optimize cluster utilization
                        dl.toolvarlist1__dl
                            dt Monitor the state of the cluster with customizable dashboards
            .toolvarlist1-bottom 
                a.button(href="https://www.gridgain.com/products/control-center", target="_blank") Learn more  
    // /.toolingbox2





    section.toolingbox.container
        h2.toolingbox__title.h4.flexi
            img(src="/public/img/features/tooling/icon-datadog.svg", alt="")
            span DATADOG INTEGRATION FOR APACHE IGNITE
        
        .toolingbox__picwrap 
            img(src="/public/img/features/tooling/data-dog.jpg", alt="")
        .toolingbox__bg
            .toolingbox__picdescr.h5.
                Datadog is a general-purpose monitoring service that integrates <br>
                natively with Apache Ignite and supports the following:
            .toolvarlist2
                .toolvarlist2__item
                    p Collect and visualize metrics for your Ignite nodes through an out-of-the-box dashboard
                .toolvarlist2__item
                    p Track cluster-wide memory usage, including detailed garbage collection activity
                .toolvarlist2__item
                    p Use the built-in health check for Ignite to&nbsp;create an&nbsp;alert and notify you about the &laquo;node goes offline&raquo; events
            .toolvarlist1-bottom 
                a.button(href="https://www.datadoghq.com/blog/monitor-apache-ignite-with-datadog/", target="_blank") Learn more  
    // /.toolingbox3





    section.toolingbox.container
        h2.toolingbox__title.h4.flexi
            img(src="/public/img/features/tooling/icon-zabbix.svg", alt="")
            span ZABBIX
        
        .toolingbox__picwrap 
            img(src="/public/img/features/tooling/zabbix.png", alt="")
        .toolingbox__bg
            .toolingbox4__wrap 
                .toolingbox4__left
                    h3.toolingbox4__title Zabbix is an open-source monitoring <br>software tool for diverse IT components:
                    ul.dashlist
                        li networks
                        li servers
                        li virtual machines
                        li cloud services
                .toolingbox4__right
                    h3.toolingbox4__title Zabbix provides monitoring <br>metrics:
                    ul.dashlist
                        li network utilization
                        li CPU load
                        li disk space consumption.
            .toolingbox4__numblock 
                h3.h5.toolingbox4__numtitle Essential characteristics:
                .toolingbox4__numwrap.pt-3
                    .toolingbox4__numitem 
                        i 01
                        p Official JMX Template for Apache Ignite computing platform.
                        p.toolingbox4__small This template is contributed and maintained by an Ignite community member.
                    .toolingbox4__numitem 
                        i 02
                        p For Zabbix version: 5.4 and higher of data loss or corruption execute on nodes across the cluster.
                    .toolingbox4__numitem 
                        i 03
                        p This template works with standalone and cluster instances. Metrics are collected by&nbsp;JMX. All metrics are discoverable.
            .toolvarlist1-bottom 
                a.button(href="https://www.zabbix.com/integrations/ignite#tab:official1", target="_blank") Learn more  
    // /.toolingbox4




    section.toolingend
        .container.flexi
            .toolingend__main
                h2.toolingend__title.h4 Ready to Start with Apache Ignite?
                p.fz20.pt-1x Start with our Quick Start Guides and build your first application <br>in 5-10 minutes
            .toolingend__action
                a.button Build your first application

