<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>DevOps Dashboard with Heatmap∗</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Márk Török</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Norbert Pataki</string-name>
          <email>patakino@elte.hu</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Programming Languages and Compilers, Eötvös Loránd University</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>ELTE Eötvös Loránd University, Budapest, Hungary Faculty of Informatics, 3in Research Group</institution>
          ,
          <addr-line>Martonvásár</addr-line>
          ,
          <country country="HU">Hungary</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2020</year>
      </pub-date>
      <fpage>29</fpage>
      <lpage>31</lpage>
      <abstract>
        <p>DevOps is an emerging approach that aims at the symbiosis of development, quality assurance and operations. Developers need feedback from the test executions that Continuous Integration servers support. On the other hand, developers need feedback from deployed application that is in production. We have created a DevOps dashboard tool that visualizes how the deployed applications behave in production. In this paper, we present an extension of our dashboard tool. This extension is a heatmap that presents the features' usage. DevOps tool provides result from the end-users, so it can be seen if a new feature is unused or an old one needs more capacity because too many users take advantage of it.</p>
      </abstract>
      <kwd-group>
        <kwd>DevOps</kwd>
        <kwd>Dashboard</kwd>
        <kwd>Feedback</kwd>
        <kwd>Heatmap</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>Nowadays software development is rather a workflow than a process. It has plenty
of phases and usually many teams work on a software separately but at the same
time. While software engineers design the architecture, and do the programming,
the team of test engineers prepares the test cases for the application and business
analysts extend the requirements of the further features. The team is responsible
for the Continuous Integration (CI) pipelines as well as setting up the environments
for the diferent phases of the workflow, like integration environments for the test
team, or for the developers in which resources for the team like fixtured databases,
REST or storage services are provided.</p>
      <p>All members of the team have to keep their eyes on those environments and
pipelines that belong to their roles. They monitor the changes and, through their
tools, provide feedback of the state of the workflow at any time. Instant
feedback responses are essential from the perspective of time, money and, many times,
motivation. The faster the teams get a picture about the particular part of the
workflow, the faster they can react.</p>
      <p>As we see, monitoring is one of the main and most important
responsibilities of the whole engineering team. An environment could be full of measurable
segments, from the diferent memory usages to the usability of the CPU, to the
application-specific information, to the healthcheck or status of services. Moreover,
the environment can contain databases, application or web servers, storage services,
mail servers, or can be the host of multiple, parallelly running jobs or processes.
All of these consume memory and CPUs or GPUs, and most of them can provide
custom information about their memory consumption, number of working threads
running inside the application, or healthchecks.</p>
      <p>Since most of these environments belong to the test or developer teams, the
necessary enviroment changes by commits or merge requests. Every commit could
bring changes on the code base as well as on the tests. These changes can result
in diferent memory, CPU, GPU and service usages. Comparing the results of the
diferent build pipelines, teams can easily get a picture about their current work
and the efects that those changes could bring.</p>
      <p>Giving feedbacks about the observed system can provide information about
how the memory consumption is optimized or how well the processes are
scheduled. Introduction of new features can suprise the engineering team if they use
more resource than it was expected. As a new dimension on the top of resource
monitoring is the tracking of user-actions and exception handling of features, and
how a newly introduced feature change the usage of resources.</p>
      <p>
        In this paper, we present our tool that can provide additional dimensions above
the usual monitoring as well as provides instant feedback about the diferent
environments and status information about the services running inside those
environments in the mirror of the changes. We present the implementation details of
the heatmap functionality. This tool is able to work together with DevOps-related
infrastructures, such as Docker [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>The rest of this paper is organized as follows. The usual DevOps toolset is
presented in Section 2. After, our dashboard tool is presented in Section 3. We
detail our heatmap functionality in Section 4. Finally, this paper is concluded in
Section 5.</p>
    </sec>
    <sec id="sec-2">
      <title>2. DevOps Toolset</title>
      <p>In this section, we show the useful tools in the DevOps culture. We use these tools
as a basis of our solution; the proposed approach is an actual extension of this
toolset.</p>
      <p>
        Continuous Integration (CI) is a widely-used practice to discover compilation
and functional defects rapidly during development. The major aim of CI is to avoid
integration hell [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. This is a state in which developers spend more time preparing
the code to be checked into the repository than writing the code itself. Extreme
programming (XP) emphasizes the importance of continuous integration. A build
or CI server (e.g. Jenkins) checks the version control repository periodically and
launches the compilation and testing process if any change is discovered [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. If
there is some kind of failure, it can be seen who have committed changes, what
are the commit messages and which files are afected in previous changes in the
repository. The status of the CI pipeline is usually displayed on big monitors so
software engineers can observe it over time. Major benefits of the CI approach are
the fast feedback, visibility and traceability.
      </p>
      <p>
        Continuous Delivery (CD) is a software development discipline. This discipline
aims at building software in such a way that the software can be released to
production at any time [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. It is a series of processes that aims at the safe and rapid
deployment to the production. Every change is being delivered to a
productionlike environment called a staging environment. Rigorous automated testing ensures
that the business applications and service work as expected. Since every change is
delivered to a staging environment using complete automation, one can have
confidence the application can be deployed to production easily when the business logic
is ready [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Therefore, this approach is widely-used in modern software engineering
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        The DevOps approach extends the CD discipline and focuses on comprehensive
CD pipelines: starting with building, followed by diferent kinds of testing. Unit
testing, component testing, integration tests, end-to-end tests, performance testing
should be performed on the software. Code coverage is measured as well. In the
meantime, static analyzer tools try to find bugs, code smells and memory leaks in
the source code [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. 3rd-party compliance shall be checked in the build pipeline.
Automated vulnerability scanning of the software is mandatory to discover security
gaps. The documentation of software (e.g. user guide, API description, etc.) can
be generated during the execution of pipeline. The visibility of the whole process
is guaranteed.
      </p>
      <p>After this phase, the automatic deployment of application starts. Application
Release Automation (ARA) tools are available that can communicate with the CI
server and the deployment steps can be designed on the graphical user interface
of these tools. The DevOps culture argues for the deployment automation at the
level of the application. The automatic upgrade and roll-back processes involve
many dificult challenges. Database schemas, the path and filename attributes of
configuration files, names and number of configuration parameters, APIs, and 3
rdparty components (e.g. message queues) may be changed when a new software
version is released. The deployment process has to cover these changes as well.
This approach requires automation and visibility.</p>
      <p>
        DevOps considers the monitoring and logging of the deployed application in
the production environment [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The development team is eager for feedback from
the application which is in the production environment. The feedback may include
many aspects of the software: for instance, unused features in the software, memory
or other resource leak detection or performance bottlenecks. Developers have to
get as much information as possible to be able to take care of a trouble. Problems
may cause automatic roll-back of the application to the previous stable version.
      </p>
      <p>
        ELK stack is a mainstream end-to-end approach for collecting, filtering,
analyzing and visualizing log [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. ELK stack consists of three separate applications that
work together [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Elasticsearch, Logstash and Kibana are included in the ELK
stack.
      </p>
      <p>The Logstash component is responsible for collecting logs. It supports wide
variety of sources where the logs come from and it ensures the centralized logging
infrastructure. Logstash provides custom logic for parsing logs come from any kind
of application.</p>
      <p>Elasticsearch stores the collected logs. It is a search server which provides a
distributed, multitenant-capable full-text search engine. Elasticsearch has a RESTful
API using JSON for querying and filtering the underlying Logstash that contains
the collected logs. Client libraries are available for many programming languages.</p>
      <p>Kibana is the front-end of the ELK stack. It is a log comprehension tool which
is able to visualize the logs as a web application. It provides sophisticated analytics
capabilities, seamless integration with Elasticsearch, and wide range of charts and
other graphical opportunities.</p>
      <p>Logs of complex applications can be incomprehensible for human processing.
Log analysis may involve big data analysis. Tools are available that extend the
ELK stack with big data analysis features (e.g. Elasticsearch for Apache Hadoop
(ES-Hadoop)).</p>
      <p>The analyses of logs and monitoring data are application-specific and their
evaluation may be dificult. Using big data analysis, machine learning can be
involved. In this paper, we do not focus how the logs should be processed in a
general way. We assume that logs of a specific application can be processed and
usage information can be extracted automatically. However, in this paper, we take
into consideration if the feedback reports are received by architect or design team
who defines the work for the development team.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Our Dashboard</title>
      <p>Dashboards have been part of the DevOps toolset since the beginning. There can
be diferent kind of dashboards on the market with diferent purposes and goals
from the beginning to the end of the CI/CD pipeline.</p>
      <p>A classic dashboard for monitoring tool shows the metrics which are collected
from the diferent environment (eg. test, stage, production). Our dashboard
extends the classic approach with an additional dimension. We show the diferencies
based on merge requests, and can compare the current metrics to the historical
ones.</p>
      <p>Monitoring these changes can provide a closer picture about how the application
works in the diferent environments and provide feedback about the changes that
have been applied. This approach reflects whether the new features, bug fixes,
optimizations can bring better performance on the specified resources. Monitoring
an environment or a service inside an environment requires such an interface to gain
information about them. In our approach, we took advantage of agents to observe
the changes. These agents are located on machines that play the role of the hosts
of the environments. Every single agent is reliable for watching only one service
per environment and to hand over the logged data to the Dashboard application.</p>
      <p>In the regular way, after CI executes phases (build, deploy, test), sets up the
services and then deploys the application, it executes tests against it. In our solution,
CI pipeline is responsible to deploy not just the application onto the environment
but it sets up the whole environment as well with services, in place of the old,
altered one. CI installs our agents onto the environment with itself. This way we do
not have stuck processes, dangling objects in the cache, our abandoned files on the
disk. The agent sends information to the Dashboard containing all observed data
about the deployed application and services. The Dashboard presents the collected
data in charts whether it is a worker count from Tomcat or Docker statistics.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Heatmap</title>
      <p>As to log the diferent metrics and get a subtle picture about the system, about
the application, about the environment, and how they interact to each other, we
introduced agents that send the specific information about them to the dashboard
application which accumulates them and shows them as metrics.</p>
      <p>Agents can gather information from the appropriate environment like how much
processor is used by the application, how much memory is consumed, what size of
volumes are taken during the execution, it can provide a picture about the cache,
the band-width or any other instances that run on the machine.</p>
      <p>Knowing how changes make afect on the system is inevitable if the developers
are intended to make decisions about which way we would like to go, what
technologies we would like to use, what patterns we would like to apply. On the other
hand, sometimes the result of changes can be hidden from agents that monitor
the resources of the given infrastructure of the environment. Though, the memory
consumption has not changed, the cache is fast as it was in the previous release,
but the number of requests from client side started dropping. What if we
introduced a new feature to the application and realised that from that point, the CPU
usage increased dramatically. We know exactly which release brought the changes,
though we would like to visualise the reaction from the client side.</p>
      <p>We provide a solution for tracking the behaviour of the application from inside
as well. As shown below, we implemented an extension that can be placed in the
application and log the specified parameters when the appropriate feature is in-use.</p>
      <p>The feature itself is identified by a unique identifier that is passed as a required
argument of the agent. Additionally user can pass such an arguments like which
user called the function. Like date and time information are logged automatically,
thus the dashboard can provide information regarding the usage in a timeframe as
well.
get ’/new-feature’ do</p>
      <p>FeatureAgent.log(’feature-identifier’,
end
# some business logic
# implementation comes here
render ’new-feature.page’</p>
      <p>Heatmap is a graphical technique and approach of visualising data. Here, toning
starts from green, which represents the less active points, to yellow, to orange, to
red, which represents the area with most frequent actions on it.</p>
      <p>For the heatmap, we retrieve all usage information based on the logged features’
usage data. We can create runtime metrics and statistics, and define how “popular”
a feature is. This popularity value is mapped to colors. Thus, we do not deal with
HTML structure and any client-related information.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusion</title>
      <p>DevOps is rather new approach for the development, maintenance of modern
applications. DevOps is based on symbiosis of development, quality assurance and
operations. DevOps requires feedback from all phases of development, deployment
and usage of the production. DevOps focuses on the end-users because they do not
want to deal with subtle background of the entire programming processes.</p>
      <p>We have created a tool that retrieve information from the application from the
staging or production. Our solution is able to compare the diferent releases or
commits. We take advantage of hardware utilization as well, but we focus on the
usage information for realizing if features are unused and can be discontinued. We
present our heatmap extension for the tool.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Babati</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horváth</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Májer</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pataki</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <article-title>Static Analysis Toolset with Clang</article-title>
          ,
          <source>In Proc. of the 10th International Conference on Applied Informatics (ICAI</source>
          <year>2017</year>
          ), pp.
          <fpage>23</fpage>
          -
          <lpage>29</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Bernstein</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <article-title>Containers and cloud: From LXC to Docker to Kubernetes, IEEE Cloud Computing</article-title>
          , Vol.
          <volume>1</volume>
          (
          <issue>3</issue>
          ) (
          <year>2014</year>
          ),
          <fpage>81</fpage>
          -
          <lpage>84</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Cukier</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <article-title>DevOps patterns to scale web applications using cloud services</article-title>
          ,
          <source>in Proc. of the 2013 Companion Publication for Conference on Systems, Programming, &amp; Applications: Software for Humanity</source>
          , SPLASH '
          <volume>13</volume>
          ,
          <fpage>143</fpage>
          -
          <lpage>152</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <article-title>Continuous delivery: Huge benefits, but challenges too</article-title>
          ,
          <source>IEEE Software</source>
          , Vol.
          <volume>32</volume>
          (
          <issue>2</issue>
          ) (
          <year>2015</year>
          ),
          <fpage>50</fpage>
          -
          <lpage>54</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Langi</surname>
            ,
            <given-names>P. P. I.</given-names>
          </string-name>
          , Widyawan, Najib,
          <string-name>
            <given-names>W.</given-names>
            ,
            <surname>Aji</surname>
          </string-name>
          ,
          <string-name>
            <surname>T. B.</surname>
          </string-name>
          ,
          <article-title>An evaluation of Twitter river and Logstash performances as elasticsearch inputs for social media analysis of Twitter</article-title>
          ,
          <source>In Proc. of the 2015 International Conference on Information Communication Technology and Systems (ICTS)</source>
          ,
          <fpage>181</fpage>
          -
          <lpage>186</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Leppänen</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mäkinen</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pagels</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Eloranta</surname>
            ,
            <given-names>V. P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Itkonen</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mäntylä</surname>
            ,
            <given-names>M. V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Männistö</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <article-title>The highways and country roads to continuous deployment</article-title>
          ,
          <source>IEEE Software</source>
          , Vol.
          <volume>32</volume>
          (
          <issue>2</issue>
          ) (
          <year>2015</year>
          ),
          <fpage>64</fpage>
          -
          <lpage>72</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Lwakatare</surname>
            ,
            <given-names>L. E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuvaja</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Oivo</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , Dimensions of DevOps,
          <source>In Proc. of the 16th International Conference on Agile Processes in Software Engineering and Extreme Programming (XP</source>
          <year>2015</year>
          ),
          <fpage>212</fpage>
          -
          <lpage>217</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Révész</surname>
            ,
            <given-names>Á</given-names>
          </string-name>
          , Pataki,
          <string-name>
            <given-names>N.</given-names>
            ,
            <surname>Containerized</surname>
          </string-name>
          <string-name>
            <surname>A</surname>
          </string-name>
          /B Testing,
          <source>in Proc. of the Sixth Workshop on Software Quality Analysis</source>
          , Monitoring, Improvement, and
          <string-name>
            <surname>Applications</surname>
          </string-name>
          (SQAMIA
          <year>2017</year>
          ), pp.
          <volume>14</volume>
          (
          <issue>1</issue>
          )-
          <volume>14</volume>
          (
          <issue>8</issue>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Révész</surname>
            ,
            <given-names>á.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pataki</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <source>Integration Heaven of Nanoservices, in Proc. of the 21 th International Multi-Conference INFORMATION SOCIETY IS'2018</source>
          , Volume G: Collaboration,
          <source>Software and Services in Information Society</source>
          , pp.
          <fpage>43</fpage>
          -
          <lpage>46</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Stolberg</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <article-title>Enabling agile testing through continuous integration</article-title>
          ,
          <source>In Proc. of the Agile Conference</source>
          ,
          <year>2009</year>
          ,
          <source>(AGILE '09)</source>
          ,
          <fpage>369</fpage>
          -
          <lpage>374</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Török</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pataki</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <article-title>Service Monitoring Agents for DevOps Dashboard Tool</article-title>
          ,
          <source>in Proc. of the 21 th International Multi-Conference INFORMATION SOCIETY IS'2018</source>
          , Volume G: Collaboration,
          <source>Software and Services in Information Society</source>
          , pp.
          <fpage>47</fpage>
          -
          <lpage>50</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>