{"id":7976,"date":"2026-03-04T22:38:47","date_gmt":"2026-03-04T20:38:47","guid":{"rendered":"https:\/\/scalemedia.co.za\/cybermedia\/?post_type=docs&#038;p=7976"},"modified":"2026-03-04T22:46:52","modified_gmt":"2026-03-04T20:46:52","password":"","slug":"siem-visualization-example-1","status":"publish","type":"docs","link":"https:\/\/scalemedia.co.za\/cybermedia\/docs\/siem-visualization-example-1\/","title":{"rendered":"SIEM Visualization Example 1"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">SIEM Visualization Example 1: Failed Logon Attempts (All Users)<\/h1>\n\n\n\n<p>Dashboards in SIEM solutions serve as containers for multiple visualizations, allowing us to organize and display data in a meaningful way.<\/p>\n\n\n\n<p>In this and the following sections, we will create a dashboard and some visualizations from scratch.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Developing Our First Dashboard &amp; Visualization<\/h2>\n\n\n\n<p>Navigate to the bottom of this section and click on&nbsp;<code>Click here to spawn the target system!<\/code><\/p>\n\n\n\n<p>Now, navigate to&nbsp;<code>http:\/\/[Target IP]:5601<\/code>, click on the side navigation toggle, and click on &#8220;Dashboard&#8221;.<\/p>\n\n\n\n<p>Delete the existing &#8220;SOC-Alerts&#8221; dashboard as follows.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization29.png\" alt=\"Elastic dashboard interface showing 'SOC-Alerts' with options to delete or create a dashboard.\"\/><\/figure>\n\n\n\n<p>When visiting the Dashboard page again we will be presented with a message indicating that no dashboards currently exist. Additionally, there will be an option available to create a new Dashboard and its first visualization. To initiate the creation of our first dashboard, we simply have to click on the &#8220;Create new dashboard&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/dashboard.png\" alt=\"Elastic interface prompting to create the first dashboard with options to install sample data and create a new dashboard.\"\/><\/figure>\n\n\n\n<p>Now, to initiate the creation of our first visualization, we simply have to click on the &#8220;Create visualization&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization.png\" alt=\"Elastic interface for editing a new dashboard, prompting to add the first visualization with options to create or add from library.\"\/><\/figure>\n\n\n\n<p>Upon initiating the creation of our first visualization, the following new window will appear with various options and settings.<\/p>\n\n\n\n<p>Before proceeding with any configuration, it is important for us to first click on the calendar icon to open the time picker. Then, we need to specify the date range as &#8220;last 15 years&#8221;. Finally, we can click on the &#8220;Apply&#8221; button to apply the specified date range to the data.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization1.png\" alt=\"Elastic dashboard creation interface with options to add filter, select index pattern 'windows*', search field names, and choose 'Bar vertical stacked' visualization.\"\/><\/figure>\n\n\n\n<p>There are four things for us to notice on this window:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A filter option that allows us to filter the data before creating a graph. For example, if our goal is to display failed logon attempts, we can use a filter to only consider event IDs that match\u00a0<code>4625 \u2013 Failed logon attempt on a Windows system<\/code>. The following image demonstrates how we can specify such a filter.<img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization2.png\" alt=\"Elastic dashboard interface with 'Add filter' option open, setting filter for 'event.code' to '4625' using operator 'is'.\"><\/li>\n\n\n\n<li>This field indicates the data set (index) that we are going to use. It is common for data from various infrastructure sources to be separated into different indices, such as network, Windows, Linux, etc. In this particular example, we will specify\u00a0<code>windows*<\/code>\u00a0in the &#8220;Index pattern&#8221;.<\/li>\n\n\n\n<li>This search bar provides us with the ability to double-check the existence of a specific field within our data set, serving as another way to ensure that we are looking at the correct data. For example, let&#8217;s say we are interested in the\u00a0<code>user.name.keyword<\/code>\u00a0field. We can use the search bar to quickly perform a search and verify if this field is present and discovered within our selected data set. This allows us to confirm that we are accessing the desired field and working with accurate data.<img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization11.png\" alt=\"Elastic dashboard interface with a filter for 'event.code: 4625' and search for fields starting with 'user.' showing available fields like 'user.name.keyword'.\">&#8220;Why\u00a0<code>user.name.keyword<\/code>\u00a0and not\u00a0<code>user.name<\/code>?&#8221;, you may ask. We should use the\u00a0<code>.keyword<\/code>\u00a0field when it comes to aggregations. Please refer to this\u00a0<a href=\"https:\/\/stackoverflow.com\/questions\/48869795\/difference-between-a-field-and-the-field-keyword\" target=\"_blank\" rel=\"noreferrer noopener\">stackoverflow question<\/a>\u00a0for a more elaborate answer.<\/li>\n\n\n\n<li>Lastly, this drop-down menu enables us to select the type of visualization we want to create. The default option displayed in the earlier image is &#8220;Bar vertical stacked&#8221;. If we click on that button, it will reveal additional available options (image redacted as not all options fit on the screen). From this expanded list, we can choose the desired visualization type that best suits our requirements and data presentation needs.<img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization4.png\" alt=\"Elastic interface showing visualization type options with 'Bar vertical stacked' selected, including other options like 'Metric' and 'Table'.\"><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>For this visualization, let&#8217;s select the &#8220;Table&#8221; option. After selecting the &#8220;Table&#8221;, we can proceed to click on the &#8220;Rows&#8221; option. This will allow us to choose the specific data elements that we want to include in the table view.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization5.png\" alt=\"Elastic table configuration interface with options to add or drag-and-drop fields for rows, columns, and metrics.\"\/><\/figure>\n\n\n\n<p>Let&#8217;s configure the &#8220;Rows&#8221; settings as follows.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization6.png\" alt=\"Elastic interface for configuring rows, selecting 'user.name.keyword' field, displaying top 1000 values, ranked by count of records in descending order.\"\/><\/figure>\n\n\n\n<p><strong>Note<\/strong>: You will notice&nbsp;<code>Rank by Alphabetical<\/code>&nbsp;and not&nbsp;<code>Rank by Count of records<\/code>&nbsp;like in the screenshot above. This is OK. By the time you perform the next configuration below,&nbsp;<code>Count of records<\/code>&nbsp;will become available.<\/p>\n\n\n\n<p>Moving forward, let&#8217;s close the &#8220;Rows&#8221; window and proceed to enter the &#8220;Metrics&#8221; configuration.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization7.png\" alt=\"Elastic table configuration showing 'windows*' index pattern, with 'Top values of user.name.keyword' in rows, and options to add fields to columns and metrics.\"\/><\/figure>\n\n\n\n<p>In the &#8220;Metrics&#8221; window, let&#8217;s select &#8220;count&#8221; as the desired metric.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization8.png\" alt=\"Elastic metrics configuration interface showing quick functions like Average, Count, and Sum, with 'Count' selected.\"\/><\/figure>\n\n\n\n<p>As soon as we select &#8220;Count&#8221; as the metric, we will observe that the table gets populated with data (assuming that there are events present in the selected data set)<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization9.png\" alt=\"Elastic table showing top values of 'user.name.keyword' with counts, and metrics configuration set to 'Count' for records.\"\/><\/figure>\n\n\n\n<p>One final addition to the table is to include another &#8220;Rows&#8221; setting to show the machine where the failed logon attempt occurred. To do this, we will select the&nbsp;<code>host.hostname.keyword<\/code>&nbsp;field, which represents the computer reporting the failed logon attempt. This will allow us to display the hostname or machine name alongside the count of failed logon attempts, as shown in the image.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization12.png\" alt=\"Elastic table showing top values of 'user.name.keyword' and 'host.hostname.keyword' with record counts, configured in rows.\"\/><\/figure>\n\n\n\n<p>Now we can see three columns in the table, which contain the following information:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The username of the individuals logging in (Note: It currently displays both users and computers. Ideally, a filter should be implemented to exclude computer devices and only display users).<\/li>\n\n\n\n<li>The machine on which the logon attempt occurred.<\/li>\n\n\n\n<li>The number of times the event has occurred (based on the specified time frame or the entire data set, depending on the settings).<\/li>\n<\/ol>\n\n\n\n<p>Finally, click on &#8220;Save and return&#8221;, and you will observe that the new visualization is added to the dashboard, appearing as shown in the following image.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization13.png\" alt=\"Elastic dashboard showing a table with top values of user names and hostnames, and their record counts.\"\/><\/figure>\n\n\n\n<p>Let&#8217;s not forget to save the dashboard as well. We can do so by simply clicking on the &#8220;Save&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization15.png\" alt=\"Elastic interface showing 'Save dashboard' dialog with title 'SOC-Alerts', description for HTB Academy's SOC Analyst Job-Role Path, and option to store time with dashboard.\"\/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Refining The Visualization<\/h2>\n\n\n\n<p>Suppose the SOC Manager suggested the following refinements:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clearer column names should be specified in the visualization<\/li>\n\n\n\n<li>The Logon Type should be included in the visualization<\/li>\n\n\n\n<li>The results in the visualization should be sorted<\/li>\n\n\n\n<li>The DESKTOP-DPOESND, WIN-OK9BH1BCKSD, and WIN-RMMGJA7T9TC usernames should not be monitored<\/li>\n\n\n\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/active-directory\/fundamentals\/service-accounts-computer\" target=\"_blank\" rel=\"noreferrer noopener\">Computer accounts<\/a>\u00a0should not be monitored (not a good practice)<\/li>\n<\/ul>\n\n\n\n<p>Let&#8217;s refine the visualization we created, so that it fulfills the suggestions above.<\/p>\n\n\n\n<p>Navigate to&nbsp;<code>http:\/\/[Target IP]:5601<\/code>, click on the side navigation toggle, and click on &#8220;Dashboard&#8221;.<\/p>\n\n\n\n<p>The dashboard we previously created should be visible. Let&#8217;s click on the &#8220;pencil&#8221;\/edit icon.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization16.png\" alt=\"Elastic dashboard interface showing a list with 'SOC-Alerts' and options to create or edit a dashboard.\"\/><\/figure>\n\n\n\n<p>Let&#8217;s now click on the &#8220;gear&#8221; button at the upper-right corner of our visualization, and then click on &#8220;Edit lens&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization18.png\" alt=\"Elastic dashboard editing 'SOC-Alerts' with a table of top user and hostnames, and options to edit lens, clone panel, or edit panel title.\"\/><\/figure>\n\n\n\n<p>&#8220;Top values of user.name.keyword&#8221; should be changed as follows.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization19.png\" alt=\"Elastic table configuration with 'Top values of user.name.keyword' and 'host.hostname.keyword' in rows, and 'Count of records' in metrics.\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization17.png\" alt=\"Elastic interface for configuring rows, selecting 'user.name.keyword' field, displaying top 1000 values, ranked alphabetically in ascending order, with display name 'Username'.\"\/><\/figure>\n\n\n\n<p>&#8220;Top values of host.hostname.keyword&#8221; should be changed as follows.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization20.png\" alt=\"Elastic interface for configuring rows, selecting 'host.hostname.keyword' field, displaying top 1000 values, ranked by count of records in descending order, with display name 'Event logged by'.\"\/><\/figure>\n\n\n\n<p>The &#8220;Logon Type&#8221; can be added as follows (we will use the&nbsp;<code>winlog.logon.type.keyword<\/code>&nbsp;field).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization21.png\" alt=\"Elastic table configuration with 'Top values of user.name.keyword' and 'Event logged by' in rows, and 'Count of records' in metrics, with option to add fields.\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization22.png\" alt=\"Rows configuration panel with 'winlog.logon.type.keyword' field selected, number of values set to 1000, ranked by count of records in descending order, display name 'Logon Type'.\"\/><\/figure>\n\n\n\n<p>&#8220;Count of records&#8221; should be changed as follows.&nbsp;<img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization23.png\" alt=\"Metrics panel with 'Count' function selected, field set to 'Records', display name '# of logins', text alignment 'Right'.\"><\/p>\n\n\n\n<p>We can introduce result sorting as follows.&nbsp;<img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization25.png\" alt=\"Elastic dashboard showing a table with columns: Username, Event logged by, Logon Type, and '# of logins' sorted descending.\"><\/p>\n\n\n\n<p>All we have to do now is click on &#8220;Save and return&#8221;.<\/p>\n\n\n\n<p>The DESKTOP-DPOESND, WIN-OK9BH1BCKSD, and WIN-RMMGJA7T9TC usernames can be excluded by specifying additional filters as follows.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization24.png\" alt=\"Elastic dashboard with filter settings: Field 'user.name.keyword', operator 'is not', value 'DESKTOP-DPOESND'.\"\/><\/figure>\n\n\n\n<p>Computer accounts can be excluded by specifying the following KQL query and clicking on the &#8220;Update&#8221; button.<\/p>\n\n\n\n<p>&nbsp;&nbsp;SIEM Visualization Example 1: Failed Logon Attempts (All Users)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NOT user.name: *&lt;strong&gt;$&lt;\/strong&gt; AND winlog.channel.keyword: Security\n<\/code><\/pre>\n\n\n\n<p>The&nbsp;<code>AND winlog.channel.keyword: Security<\/code>&nbsp;part is to ensure that no unrelated logs are accounted for.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization34.png\" alt=\"Elastic dashboard with filters: NOT user.name:*$ AND winlog.channel.keyword: Security, showing a table with columns: Username, Event logged by, Logon Type, and '# of logins'.\"\/><\/figure>\n\n\n\n<p>This is our visualization after all the refinements we performed.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization35.png\" alt=\"Elastic dashboard with filters: NOT user.name:*$ AND winlog.channel.keyword: Security, displaying a table with columns: Username, Event logged by, Logon Type, and '# of logins'.\"\/><\/figure>\n\n\n\n<p>Finally, let&#8217;s give our visualization a title by clicking on &#8220;No Title&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.services-k8s.prod.aws.htb.systems\/content\/modules\/211\/visualization36.png\" alt=\"Elastic dashboard with filters applied, showing a table with columns: Username, Event logged by, Logon Type, and '# of logins'. Customize panel dialog open with 'Show panel title' option.\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>SIEM Visualization Example 1: Failed Logon Attempts (All Users) Dashboards in SIEM solutions serve as containers for multiple visualizations, allowing us to organize and display data in a meaningful way. In this and the following sections, we will create a dashboard and some visualizations from scratch. Developing Our First Dashboard &amp; Visualization Navigate to the&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"doc_category":[46],"doc_tag":[],"class_list":["post-7976","docs","type-docs","status-publish","hentry","doc_category-security-monitoring-siem-fundamentals"],"year_month":"2026-04","word_count":1167,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"admin","author_nicename":"admin","author_url":"https:\/\/scalemedia.co.za\/cybermedia\/author\/admin\/"},"doc_category_info":[{"term_name":"Security Monitoring &amp; SIEM Fundamentals","term_url":"https:\/\/scalemedia.co.za\/cybermedia\/docs-category\/security-monitoring-siem-fundamentals\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs\/7976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/comments?post=7976"}],"version-history":[{"count":1,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs\/7976\/revisions"}],"predecessor-version":[{"id":7977,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/docs\/7976\/revisions\/7977"}],"wp:attachment":[{"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/media?parent=7976"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/doc_category?post=7976"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/scalemedia.co.za\/cybermedia\/wp-json\/wp\/v2\/doc_tag?post=7976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}