extend ../_components/base.pug

block pagetitle
    title Tooling 

block css 
    link(rel="stylesheet", href="../css/tooling.css?ver=" + config.version)



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="/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="/img/features/tooling/icon-apache.svg", alt="")
            span VISOR COMMAND LINE AND CONTROL SCRIPT
        
        .toolingbox__picwrap 
            img(src="/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="/img/features/tooling/icon-gridgain.svg", alt="")
            span GRIDGAIN CONTROL CENTER
        
        .toolingbox__picwrap 
            img(src="/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="/img/features/tooling/icon-datadog.svg", alt="")
            span DATADOG INTEGRATION FOR APACHE IGNITE
        
        .toolingbox__picwrap 
            img(src="/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="/img/features/tooling/icon-zabbix.svg", alt="")
            span ZABBIX
        
        .toolingbox__picwrap 
            img(src="/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
                .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

