) {
+ core.chrome.navGroup.addNavLinksToGroup(DEFAULT_NAV_GROUPS.observability, [
+ {
+ id: observabilityOverviewID,
+ category: undefined,
+ order: 10,
+ },
+ ]);
+
+ core.chrome.navGroup.addNavLinksToGroup(DEFAULT_NAV_GROUPS.observability, [
+ {
+ id: observabilityGettingStartedID,
+ category: undefined,
+ order: 20,
+ },
+ ]);
+
core.chrome.navGroup.addNavLinksToGroup(DEFAULT_NAV_GROUPS.observability, [
{
id: observabilityApplicationsID,
diff --git a/server/routes/getting_started/assets/fluent-bit-csv-upload-1.0.0.ndjson b/server/routes/getting_started/assets/fluent-bit-csv-upload-1.0.0.ndjson
new file mode 100644
index 000000000..b04c765d7
--- /dev/null
+++ b/server/routes/getting_started/assets/fluent-bit-csv-upload-1.0.0.ndjson
@@ -0,0 +1,4 @@
+{"attributes":{"description":"upload a csv file example using fluent-bit agent","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"fluent-bit-csv-upload","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"fluent-bit-csv-upload\",\"type\":\"markdown\",\"aggs\":[],\"params\":{\"fontSize\":12,\"openLinksInNewTab\":false,\"markdown\":\"# Uploading a CSV File into an OpenSearch Index Using Fluent Bit\\n\\nThis tutorial will guide you through the process of setting up Fluent Bit to monitor a directory for CSV files and upload their contents into an OpenSearch index.\\n\\n## Prerequisites\\n\\n- An OpenSearch instance running and accessible.\\n- Fluent Bit installed on your system.\\n- A directory containing your CSV files.\\n\\n## Step 1: Install Fluent Bit\\n\\n### On Linux:\\n\\n```bash\\ncurl -L https://fluentbit.io/releases/1.8/fluent-bit-1.8.11-linux-x86_64.tar.gz -o fluent-bit.tar.gz\\ntar -xvf fluent-bit.tar.gz\\ncd fluent-bit/bin\\n```\\n\\n### On macOS:\\n\\n```bash\\nbrew install fluent-bit\\n```\\n\\n### On Windows:\\n\\nDownload and extract Fluent Bit from [Fluent Bit releases](https://fluentbit.io/download/).\\n\\n## Step 2: Create Fluent Bit Configuration Files\\n\\n#### Create `fluent-bit.conf`\\n\\nThis is the main configuration file for Fluent Bit. It defines the input source, parser, and output destination.\\n\\n```ini\\n[SERVICE]\\n Flush 1\\n Log_Level info\\n Parsers_File parsers.conf\\n\\n[INPUT]\\n Name tail\\n Path /path/to/your/csv/files/*.csv\\n Parser csv\\n Tag csv\\n Refresh_Interval 5\\n Rotate_Wait 30\\n\\n[OUTPUT]\\n Name opensearch\\n Match *\\n Host your-opensearch-host\\n Port 9200\\n Index csv-index\\n HTTP_User your-username\\n HTTP_Passwd your-password\\n tls off\\n Suppress_Type_Name On\\n tls.verify off\\n```\\n\\n### Create `parsers.conf`\\n\\nThis file defines the CSV parser.\\n\\n```ini\\n[PARSER]\\n Name csv\\n Format regex\\n Regex ^(?
[^,]+),(?[^,]+),(?[^,]+),(?[^,]+),(?[^,]+)$\\n Time_Key timestamp\\n Time_Format %Y-%m-%d %H:%M:%S\\n```\\n\\n### Direct the CSV folder location\\n\\nEnsure this file is in the directory you specified in the `Path` of the `fluent-bit.conf` file.\\n\\n\\n## Step 3: Run Fluent Bit\\n\\nNavigate to the directory containing the Fluent Bit executable and the configuration files. Then, start Fluent Bit with the configuration files.\\n\\n```bash\\n/path/to/fluent-bit/bin/fluent-bit -c /path/to/fluent-bit.conf\\n```\\n\\n## Step 4: Verify Data in OpenSearch\\n\\nAfter starting Fluent Bit, you can verify the data ingestion by accessing OpenSearch and searching for the `csv-index` index.\\n\\nFor example, you can use OpenSearch Dashboards or the OpenSearch API to query the index:\\n\\n### Using OpenSearch Dashboards:\\n\\n1. Open OpenSearch Dashboards in your browser.\\n2. Navigate to the \\\"Discover\\\" tab.\\n3. Select the `csv-index` index pattern.\\n4. Verify that the log data from your CSV files is being ingested and displayed.\\n\\n### Using the OpenSearch API:\\n\\n```bash\\ncurl -X GET \\\"http://your-opensearch-host:9200/csv-index/_search?pretty\\\"\\n```\\n\\n---\\n## Live Testing with Docker Compose\\nIf you prefer to test this setup using Docker Compose, you can use the following docker-compose.yml file to quickly set up an OpenSearch instance along with Fluent Bit:\\n\\nUnder the `getting-started` section you can examine a live docker-compose sample:\\n```yaml\\n/csv_file/getting-started/fluent-bit\\n|-- docker-complete.yml\\n|-- data/\\n |-- fluent-bit.conf\\n |-- parsers.conf\\n |-- logs.csv\\n\\n```\\nUse the [docker-compose](../getting-started/fluent-bit/docker-complete.yml) you can find a complete:\\n\\n`docker compose -f docker-complete.yml up -d` would instantiate the services and start sending the csv sample logs into an index. \\n\"}}"},"id":"0fad8910-43d9-11ef-a69e-0549ba61487e","migrationVersion":{"visualization":"7.10.0"},"references":[],"type":"visualization","updated_at":"2024-07-17T16:55:31.713Z","version":"WzEsMV0="}
+{"attributes":{"description":"upload a csv file example using fluent-bit agent","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"version\":\"2.15.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"22a1a11f-7ecf-46c7-a73d-b6cb5eb07b45\"},\"panelIndex\":\"22a1a11f-7ecf-46c7-a73d-b6cb5eb07b45\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"}]","timeRestore":false,"title":"csv-file-upload-fluent-bit-dashboard","version":1},"id":"1e4f1c40-43d9-11ef-a69e-0549ba61487e","migrationVersion":{"dashboard":"7.9.3"},"references":[{"id":"0fad8910-43d9-11ef-a69e-0549ba61487e","name":"panel_0","type":"visualization"}],"type":"dashboard","updated_at":"2024-07-17T16:55:31.713Z","version":"WzIsMV0="}
+{"attributes":{"fields":"[{\"count\":0,\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"application\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"application.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"application\"}}},{\"count\":0,\"name\":\"host\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"host.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"host\"}}},{\"count\":0,\"name\":\"log_level\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"log_level.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"log_level\"}}},{\"count\":0,\"name\":\"message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"message.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"message\"}}},{\"count\":0,\"name\":\"timestamp\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"timestamp.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"timestamp\"}}}]","timeFieldName":"@timestamp","title":"logs-index"},"id":"csv-getting-started-tutorial-1.0.0","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-17T16:59:06.006Z","version":"WzMsMV0="}
+{"exportedCount":3,"missingRefCount":0,"missingReferences":[]}
\ No newline at end of file
diff --git a/server/routes/getting_started/assets/golang-tutorial-1.0.0.ndjson b/server/routes/getting_started/assets/golang-tutorial-1.0.0.ndjson
new file mode 100644
index 000000000..aff9e74b3
--- /dev/null
+++ b/server/routes/getting_started/assets/golang-tutorial-1.0.0.ndjson
@@ -0,0 +1,4 @@
+{"attributes":{"description":"golang client getting started applicative log tutorial for logging applicative telemetry data in golang language to opensearch","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"golang client getting started","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"golang client getting started\",\"type\":\"markdown\",\"aggs\":[],\"params\":{\"fontSize\":12,\"openLinksInNewTab\":false,\"markdown\":\"# Golang Client Integration\\nThe next integration contains instructions and tutorial of setting up golang opensearch client and logging applicative telemetry into opensearch.\\n\\n## OpenSearch Go Client Documentation\\n\\nThe OpenSearch Go client allows you to connect your Go application with the data in your OpenSearch cluster.\\nThis guide illustrates how to connect to OpenSearch, index documents, and run queries.\\n\\n## Setup\\n\\nTo start a new project:\\n```bash\\ngo mod init \\n```\\nAdd the Go client to your project:\\n```bash\\ngo get github.com/opensearch-project/opensearch-go\\n```\\n\\n## Connecting to OpenSearch\\n\\nTo connect to the default OpenSearch host, create a client object with the address https://localhost:9200\\nIf using the Security plugin:\\n\\n```go\\nclient, err := opensearch.NewClient(opensearch.Config{\\n Transport: &http.Transport{\\n TLSClientConfig: &tls.Config{InsecureSkipVerify: true},\\n },\\n Addresses: []string{\\\"https://localhost:9200\\\"},\\n Username: \\\"admin\\\", // For testing only. Don't store credentials in code.\\n Password: \\\"admin\\\",\\n})\\n```\\nWithout the Security plugin:\\n```go\\nclient, err := opensearch.NewClient(opensearch.Config{\\n Transport: &http.Transport{\\n TLSClientConfig: &tls.Config{InsecureSkipVerify: true},\\n },\\n Addresses: []string{\\\"http://localhost:9200\\\"},\\n})\\n```\\n\\n## Creating an Index\\n\\nTo create an index:\\n```go\\nsettings := strings.NewReader(`{\\n \\\"settings\\\": {\\n \\\"index\\\": {\\n \\\"number_of_shards\\\": 1,\\n \\\"number_of_replicas\\\": 0\\n }\\n }\\n}`)\\n\\nres := opensearchapi.IndicesCreateRequest{\\n Index: \\\"go-test-index1\\\",\\n Body: settings,\\n}\\n```\\n\\n## Indexing a Document\\n\\nTo index a document:\\n```go\\ndocument := strings.NewReader(`{\\n \\\"title\\\": \\\"Moneyball\\\",\\n \\\"director\\\": \\\"Bennett Miller\\\",\\n \\\"year\\\": \\\"2011\\\"\\n}`)\\n\\ndocId := \\\"1\\\"\\nreq := opensearchapi.IndexRequest{\\n Index: \\\"go-test-index1\\\",\\n DocumentID: docId,\\n Body: document,\\n}\\ninsertResponse, err := req.Do(context.Background(), client)\\n```\\n\\n## Performing Bulk Operations\\n\\nTo perform bulk operations:\\n```go\\nblk, err := client.Bulk(\\n strings.NewReader(`\\n { \\\"index\\\" : { \\\"_index\\\" : \\\"go-test-index1\\\", \\\"_id\\\" : \\\"2\\\" } }\\n { \\\"title\\\" : \\\"Interstellar\\\", \\\"director\\\" : \\\"Christopher Nolan\\\", \\\"year\\\" : \\\"2014\\\"}\\n { \\\"create\\\" : { \\\"_index\\\" : \\\"go-test-index1\\\", \\\"_id\\\" : \\\"3\\\" } }\\n { \\\"title\\\" : \\\"Star Trek Beyond\\\", \\\"director\\\" : \\\"Justin Lin\\\", \\\"year\\\" : \\\"2015\\\"}\\n { \\\"update\\\" : {\\\"_id\\\" : \\\"3\\\", \\\"_index\\\" : \\\"go-test-index1\\\" } }\\n { \\\"doc\\\" : {\\\"year\\\" : \\\"2016\\\"} }\\n`),\\n)\\n```\\n\\n## Searching for Documents\\n\\nTo search for documents:\\n```go\\ncontent := strings.NewReader(`{\\n \\\"size\\\": 5,\\n \\\"query\\\": {\\n \\\"multi_match\\\": {\\n \\\"query\\\": \\\"miller\\\",\\n \\\"fields\\\": [\\\"title^2\\\", \\\"director\\\"]\\n }\\n }\\n}`)\\n\\nsearch := opensearchapi.SearchRequest{\\n Index: []string{\\\"go-test-index1\\\"},\\n Body: content,\\n}\\n\\nsearchResponse, err := search.Do(context.Background(), client)\\n```\\n\\nIn order to log Applicative activities, generate a log entry struct that collects applicative telemetry :\\n```\\ntype LogEntry struct {\\n Timestamp string `json:\\\"timestamp\\\"`\\n Level string `json:\\\"level\\\"`\\n Message string `json:\\\"message\\\"`\\n Source string `json:\\\"source\\\"`\\n Module string `json:\\\"module\\\"`\\n Function string `json:\\\"function\\\"`\\n UserID string `json:\\\"user_id\\\"`\\n}\\n```\\nThis would log into a dedicated applicative index for storing the application's telemetry info\\n\\n\\nHere is a complete sample application:\\n\\n```\\npackage main\\n\\nimport (\\n \\\"context\\\"\\n \\\"crypto/tls\\\"\\n \\\"encoding/json\\\"\\n \\\"fmt\\\"\\n \\\"log\\\"\\n \\\"net/http\\\"\\n \\\"time\\\"\\n\\n opensearch \\\"github.com/opensearch-project/opensearch-go\\\"\\n opensearchapi \\\"github.com/opensearch-project/opensearch-go/opensearchapi\\\"\\n)\\n\\n// LogEntry represents the structure of the log entry\\ntype LogEntry struct {\\n Timestamp string `json:\\\"timestamp\\\"`\\n Level string `json:\\\"level\\\"`\\n Message string `json:\\\"message\\\"`\\n Source string `json:\\\"source\\\"`\\n Module string `json:\\\"module\\\"`\\n Function string `json:\\\"function\\\"`\\n UserID string `json:\\\"user_id\\\"`\\n}\\n\\n// InitOpenSearchClient initializes the OpenSearch client\\nfunc InitOpenSearchClient() (*opensearch.Client, error) {\\n client, err := opensearch.NewClient(opensearch.Config{\\n Transport: &http.Transport{\\n TLSClientConfig: &tls.Config{InsecureSkipVerify: true},\\n },\\n Addresses: []string{\\\"https://localhost:9200\\\"},\\n Username: \\\"admin\\\",\\n Password: \\\"admin\\\",\\n })\\n if err != nil {\\n return nil, fmt.Errorf(\\\"failed to create OpenSearch client: %w\\\", err)\\n }\\n return client, nil\\n}\\n\\n// LogToOpenSearch logs the provided entry to OpenSearch\\nfunc LogToOpenSearch(client *opensearch.Client, entry LogEntry) error {\\n data, err := json.Marshal(entry)\\n if err != nil {\\n return fmt.Errorf(\\\"failed to marshal log entry: %w\\\", err)\\n }\\n\\n req := opensearchapi.IndexRequest{\\n Index: \\\"logs\\\",\\n DocumentID: fmt.Sprintf(\\\"%d\\\", time.Now().UnixNano()),\\n Body: strings.NewReader(string(data)),\\n }\\n\\n res, err := req.Do(context.Background(), client)\\n if err != nil {\\n return fmt.Errorf(\\\"failed to index log entry: %w\\\", err)\\n }\\n defer res.Body.Close()\\n\\n if res.IsError() {\\n return fmt.Errorf(\\\"error indexing log entry: %s\\\", res.String())\\n }\\n\\n return nil\\n}\\n\\nfunc main() {\\n client, err := InitOpenSearchClient()\\n if err != nil {\\n log.Fatalf(\\\"Error initializing OpenSearch client: %s\\\", err)\\n }\\n\\n logEntry := LogEntry{\\n Timestamp: \\\"2024-02-05T12:05:00\\\",\\n Level: \\\"info\\\",\\n Message: \\\"Processing user request.\\\",\\n Source: \\\"your_project\\\",\\n Module: \\\"request_handler\\\",\\n Function: \\\"process_request\\\",\\n UserID: \\\"user_123\\\",\\n }\\n\\n err = LogToOpenSearch(client, logEntry)\\n if err != nil {\\n log.Fatalf(\\\"Error logging to OpenSearch: %s\\\", err)\\n }\\n\\n log.Println(\\\"Log entry successfully written to OpenSearch\\\")\\n}\\n```\\n\\n## Best Practices for Effective Logging\\n\\n1. **Descriptive Log Messages**: Include clear and detailed information.\\n2. **Appropriate Log Levels**: Use different levels (INFO, DEBUG, ERROR) to categorize log messages.\\n3. **Timestamps**: Always include timestamps for chronological analysis.\\n4. **Contextual Information**: Add details like module, function, or user IDs.\\n5. **Avoid Redundant Logging**: Balance between sufficient information and avoiding overload.\\n6. **Secure Sensitive Information**: Do not log sensitive data in plain text.\\n7. **Structured Logging**: Use JSON for consistent log formats.\\n\\n## Advanced Features of OpenSearch\\n\\n- **Index Patterns and Mappings**: Optimize log data structure for better analysis and retrieval.\\n- **Visualization with Dashboards**: Create interactive dashboards for real-time log insights.\\n\\n# How to build an Application Monitor Dashboard\\nBased on the ingested logs, lets review the process of generating an informative monitor dashboard for the applicative logs:\\n\\n## Step-by-Step Tutorial: Creating an OpenSearch Dashboard for Application Logs\\n\\n### 1. Log in to opensearch dashboards\\n- Navigate to OpenSearch Dashboards.\\n- Log in and verify the logs index was created and contains logs data\\n- Go to Discover tab, select the index name and view the data\\n\\n### 2. Create an Index Pattern\\n- Go to 'Management' > 'Index Patterns'.\\n- Click 'Create Index Pattern' and enter the pattern (e.g., logs-*).\\n- Select the timestamp field (e.g., @timestamp) for time-based data.\\n- Save the index pattern.\\n\\n### 3. Build Log Queries\\n- Go to the 'Discover' tab.\\n- Use the search bar to filter logs, e.g., `log_level:ERROR` to find all error logs.\\n- For advanced filtering, utilize the Dashboard Query Language (DQL).\\n\\n### 4. Save Your Query\\n- After refining your query, save it by clicking on the 'Save' button in the 'Discover' tab.\\n- Name your saved query for easy reference.\\n\\n### 5. Create Visualizations\\n- Go to 'Visualize' > 'Create Visualization'.\\n- Select the type of visualization you want to create (e.g., bar chart, pie chart).\\n- Choose your saved query as the data source.\\n\\n### 6. Add Buckets for Data Aggregation\\n- In the visualization settings, add buckets to aggregate your data. For example:\\n - Use 'Date Histogram' for the X-axis to display logs over time.\\n - Add other metrics or aggregations as needed.\\n\\n### 7. Split Series for Detailed Insights\\n- Add another bucket to split data by specific fields, such as `service.name` or `host.name`.\\n- This will allow you to see log distributions across different services or hosts.\\n\\n### 8. Customize Visualization\\n- Customize the visualization with labels, colors, and other settings to make it more informative and visually appealing.\\n\\n### 9. Save and Add to Dashboard\\n- Save the visualization with a descriptive name.\\n- Navigate to the 'Dashboard' tab and create a new dashboard.\\n- Add your saved visualizations to the dashboard by selecting them from the list.\\n\\n### 10. Finalize and Share\\n- Arrange the visualizations on the dashboard as desired.\\n- Save the dashboard with a meaningful name.\\n- Share the dashboard with your team by generating a shareable link or embedding it in your application.\\n\\n### Tips for Effective Dashboards\\n- Use different types of visualizations to present various aspects of your log data.\\n- Regularly update the time filter to ensure you're viewing the most recent logs.\\n- Take advantage of OpenSearch Dashboards' interactive features, such as drill-downs and filters, for deeper analysis.\\n\\n\"}}"},"id":"37dbabf0-3ff7-11ef-a406-af6eb3c84d77","migrationVersion":{"visualization":"7.10.0"},"references":[],"type":"visualization","updated_at":"2024-07-12T02:34:09.838Z","version":"WzQxLDVd"}
+{"attributes":{"description":"golang client getting started applicative log tutorial for logging applicative telemetry data in golang language to opensearch","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"version\":\"2.15.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"b7e27081-5e45-44c7-bdb4-ea02a793be38\"},\"panelIndex\":\"b7e27081-5e45-44c7-bdb4-ea02a793be38\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"}]","timeRestore":false,"title":"golang client getting started dashboard","version":1},"id":"golang-getting-started-tutorial-1.0.0","migrationVersion":{"dashboard":"7.9.3"},"references":[{"id":"37dbabf0-3ff7-11ef-a406-af6eb3c84d77","name":"panel_0","type":"visualization"}],"type":"dashboard","updated_at":"2024-07-12T02:34:24.241Z","version":"WzQyLDVd"}
+{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"error_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"function\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"level\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"module\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"source\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"user_id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]","timeFieldName":"timestamp","title":"applicative_logs*"},"id":"15746330-447b-11ef-99f2-2b48f7e65060","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-17T20:28:10.338Z","version":"WzUsMV0="}
+{"exportedCount":3,"missingRefCount":0,"missingReferences":[]}
\ No newline at end of file
diff --git a/server/routes/getting_started/assets/java-tutorial-1.0.0.ndjson b/server/routes/getting_started/assets/java-tutorial-1.0.0.ndjson
new file mode 100644
index 000000000..db3e06e8b
--- /dev/null
+++ b/server/routes/getting_started/assets/java-tutorial-1.0.0.ndjson
@@ -0,0 +1,4 @@
+{"attributes":{"description":"Getting started for java client instructions v","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"java_client","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"java_client\",\"type\":\"markdown\",\"aggs\":[],\"params\":{\"fontSize\":12,\"openLinksInNewTab\":false,\"markdown\":\"Here's a similar getting started guide for Java based on the provided Python instructions.\\n\\n# Java Client Integration\\n\\nThis guide provides instructions and a tutorial on setting up the Java OpenSearch client and logging application telemetry into OpenSearch.\\n\\n## Logging with OpenSearch in Java:\\n\\nLogging is an important aspect of software development, and OpenSearch is a robust and scalable solution for storing and analyzing logs efficiently. This guide walks you through integrating OpenSearch as a storage and analytics component in your Java project for effective logging.\\n\\n### Install Java Libraries\\n\\nAdd the OpenSearch Java client to your Maven project's `pom.xml` to interact with OpenSearch:\\n\\n```xml\\n\\n org.opensearch.client\\n opensearch-rest-client\\n 2.15.0\\n\\n\\n\\n org.opensearch.client\\n opensearch-java\\n 2.6.0\\n\\n```\\nSee additional documentation [here](https://opensearch.org/docs/latest/clients/java/).\\n\\n## Integrating OpenSearch with Your Java Project\\n\\n### Step 1: Import the OpenSearch Client\\n\\nIn your Java project, use a class called IndexData, which is a simple Java class that stores basic data and methods.\\nFor your own OpenSearch cluster, you might find that you need a more robust class to store your data.\\n\\n\\n\\n```java\\nstatic class IndexData {\\n private String firstName;\\n private String lastName;\\n\\n public IndexData(String firstName, String lastName) {\\n this.firstName = firstName;\\n this.lastName = lastName;\\n }\\n\\n public String getFirstName() {\\n return firstName;\\n }\\n\\n public void setFirstName(String firstName) {\\n this.firstName = firstName;\\n }\\n\\n public String getLastName() {\\n return lastName;\\n }\\n\\n public void setLastName(String lastName) {\\n this.lastName = lastName;\\n }\\n\\n @Override\\n public String toString() {\\n return String.format(\\\"IndexData{first name='%s', last name='%s'}\\\", firstName, lastName);\\n }\\n}\\n```\\n\\n### Step 2: Establish a Connection\\n\\nInitializing the client with SSL and TLS enabled using RestClient Transport\\nThis code example uses basic credentials that come with the default OpenSearch configuration.\\nIf you’re using the Java client with your own OpenSearch cluster, be sure to change the code so that it uses your own credentials.\\n\\n\\n```java\\nimport org.apache.http.HttpHost;\\nimport org.apache.http.auth.AuthScope;\\nimport org.apache.http.auth.UsernamePasswordCredentials;\\nimport org.apache.http.impl.nio.client.HttpAsyncClientBuilder;\\nimport org.apache.http.impl.client.BasicCredentialsProvider;\\nimport org.opensearch.client.RestClient;\\nimport org.opensearch.client.RestClientBuilder;\\nimport org.opensearch.client.json.jackson.JacksonJsonpMapper;\\nimport org.opensearch.client.opensearch.OpenSearchClient;\\nimport org.opensearch.client.transport.OpenSearchTransport;\\nimport org.opensearch.client.transport.rest_client.RestClientTransport;\\n\\npublic class OpenSearchClientExample {\\n public static void main(String[] args) throws Exception {\\n System.setProperty(\\\"javax.net.ssl.trustStore\\\", \\\"/full/path/to/keystore\\\");\\n System.setProperty(\\\"javax.net.ssl.trustStorePassword\\\", \\\"password-to-keystore\\\");\\n\\n final HttpHost host = new HttpHost(\\\"https\\\", \\\"localhost\\\", 9200);\\n final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();\\n //Only for demo purposes. Don't specify your credentials in code.\\n credentialsProvider.setCredentials(new AuthScope(host), new UsernamePasswordCredentials(\\\"admin\\\", \\\"admin\\\".toCharArray()));\\n\\n //Initialize the client with SSL and TLS enabled\\n final RestClient restClient = RestClient.builder(host).\\n setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {\\n @Override\\n public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {\\n return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);\\n }\\n }).build();\\n\\n final OpenSearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());\\n final OpenSearchClient client = new OpenSearchClient(transport);\\n }\\n}\\n```\\n\\n### Step 3: Indexing Logs\\nYou can create an index with non-default settings using the following code:\\n```java\\nString index = \\\"sample-index\\\";\\n CreateIndexRequest createIndexRequest = new CreateIndexRequest.Builder().index(index).build();\\n client.indices().create(createIndexRequest);\\n\\n IndexSettings indexSettings = new IndexSettings.Builder().autoExpandReplicas(\\\"0-all\\\").build();\\n PutIndicesSettingsRequest putIndicesSettingsRequest = new PutIndicesSettingsRequest.Builder().index(index).value(indexSettings).build();\\n client.indices().putSettings(putIndicesSettingsRequest);\\n```\\n\\nIndex your logs into OpenSearch:\\n\\n```java\\nIndexData indexData = new IndexData(\\\"first_name\\\", \\\"Bruce\\\");\\nIndexRequest indexRequest = new IndexRequest.Builder().index(index).id(\\\"1\\\").document(indexData).build();\\nclient.index(indexRequest);\\n```\\n\\n### Step 4: Querying Logs\\n\\nRetrieve logs using OpenSearch's powerful search capabilities:\\n\\n```java\\nSearchResponse searchResponse = client.search(s -> s.index(index), IndexData.class);\\nfor (int i = 0; i< searchResponse.hits().hits().size(); i++) {\\n System.out.println(searchResponse.hits().hits().get(i).source());\\n }\\n```\\n\\n## Best Practices for Effective Logging\\n\\n1. **Descriptive Log Messages**: Include clear and detailed information.\\n2. **Appropriate Log Levels**: Use different levels (INFO, DEBUG, ERROR) to categorize log messages.\\n3. **Timestamps**: Always include timestamps for chronological analysis.\\n4. **Contextual Information**: Add details like module, function, or user IDs.\\n5. **Avoid Redundant Logging**: Balance between sufficient information and avoiding overload.\\n6. **Secure Sensitive Information**: Do not log sensitive data in plain text.\\n7. **Structured Logging**: Use JSON for consistent log formats.\\n\\n## Advanced Features of OpenSearch\\n\\n- **Index Patterns and Mappings**: Optimize log data structure for better analysis and retrieval.\\n- **Visualization with Dashboards**: Create interactive dashboards for real-time log insights.\\n\\n# How to build an Application Monitor Dashboard\\n\\nBased on the ingested logs, let's review the process of generating an informative monitor dashboard for the application logs:\\n\\n## Step-by-Step Tutorial: Creating an OpenSearch Dashboard for Application Logs\\n\\n### 1. Log in to OpenSearch Dashboards\\n\\n- Navigate to OpenSearch Dashboards.\\n- Log in and verify the logs index was created and contains logs data.\\n- Go to the Discover tab, select the index name, and view the data.\\n\\n### 2. Create an Index Pattern\\n\\n- Go to 'Management' > 'Index Patterns'.\\n- Click 'Create Index Pattern' and enter the pattern (e.g., logs-*).\\n- Select the timestamp field (e.g., @timestamp) for time-based data.\\n- Save the index pattern.\\n\\n### 3. Build Log Queries\\n\\n- Go to the 'Discover' tab.\\n- Use the search bar to filter logs, e.g., `log_level:ERROR` to find all error logs.\\n- For advanced filtering, utilize the Dashboard Query Language (DQL).\\n\\n### 4. Save Your Query\\n\\n- After refining your query, save it by clicking on the 'Save' button in the 'Discover' tab.\\n- Name your saved query for easy reference.\\n\\n### 5. Create Visualizations\\n\\n- Go to 'Visualize' > 'Create Visualization'.\\n- Select the type of visualization you want to create (e.g., bar chart, pie chart).\\n- Choose your saved query as the data source.\\n\\n### 6. Add Buckets for Data Aggregation\\n\\n- In the visualization settings, add buckets to aggregate your data. For example:\\n - Use 'Date Histogram' for the X-axis to display logs over time.\\n - Add other metrics or aggregations as needed.\\n\\n### 7. Split Series for Detailed Insights\\n\\n- Add another bucket to split data by specific fields, such as `service.name` or `host.name`.\\n- This will allow you to see log distributions across different services or hosts.\\n\\n### 8. Customize Visualization\\n\\n- Customize the visualization with labels, colors, and other settings to make it more informative and visually appealing.\\n\\n### 9. Save and Add to Dashboard\\n\\n- Save the visualization with a descriptive name.\\n- Navigate to the 'Dashboard' tab and create a new dashboard.\\n- Add your saved visualizations to the dashboard by selecting them from the list.\\n\\n### 10. Finalize and Share\\n\\n- Arrange the visualizations on the dashboard as desired.\\n- Save the dashboard with a meaningful name.\\n- Share the dashboard with your team by generating a shareable link or embedding it in your application.\\n\\n### Tips for Effective Dashboards\\n\\n- Use different types of visualizations to present various aspects of your log data.\\n- Regularly update the time filter to ensure you're viewing the most recent logs.\\n- Take advantage of OpenSearch Dashboards' interactive features, such as drill-downs and filters, for deeper analysis.\"}}"},"id":"128d0790-47e5-11ef-89c9-a5eb94f3bbbc","migrationVersion":{"visualization":"7.10.0"},"references":[],"type":"visualization","updated_at":"2024-07-22T04:44:25.609Z","version":"WzcyLDdd"}
+{"attributes":{"description":"getting started instructions for a java client based applicative logs dashboard","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"version\":\"2.15.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"39184cd8-b84d-48c8-821d-f749007e8bd0\"},\"panelIndex\":\"39184cd8-b84d-48c8-821d-f749007e8bd0\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"}]","timeRestore":false,"title":"java_client-dashboard","version":1},"id":"java_client_getting-started-dashboard","migrationVersion":{"dashboard":"7.9.3"},"references":[{"id":"128d0790-47e5-11ef-89c9-a5eb94f3bbbc","name":"panel_0","type":"visualization"}],"type":"dashboard","updated_at":"2024-07-22T04:44:54.511Z","version":"WzczLDdd"}
+{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"error_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"function\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"level\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"module\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"source\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"user_id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]","timeFieldName":"timestamp","title":"applicative_logs*"},"id":"15746330-447b-11ef-99f2-2b48f7e65060","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2024-07-19T21:03:51.880Z","version":"WzIxLDJd"}
+{"exportedCount":3,"missingRefCount":0,"missingReferences":[]}
\ No newline at end of file
diff --git a/server/routes/getting_started/assets/nginx-1.0.0.ndjson b/server/routes/getting_started/assets/nginx-1.0.0.ndjson
new file mode 100644
index 000000000..fc472d5e9
--- /dev/null
+++ b/server/routes/getting_started/assets/nginx-1.0.0.ndjson
@@ -0,0 +1,13 @@
+{"attributes":{"fields":"[{\"count\":0,\"name\":\"@message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_type\",\"type\":\"string\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"attributes.data_stream.dataset\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"attributes.data_stream.namespace\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"attributes.data_stream.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"body\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"communication.destination.address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"communication.destination.address.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"communication.destination.address\"}}},{\"count\":0,\"name\":\"communication.destination.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.domain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"communication.destination.domain.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"communication.destination.domain\"}}},{\"count\":0,\"name\":\"communication.destination.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.destination.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.sock.family\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.source.address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"communication.source.address.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"communication.source.address\"}}},{\"count\":0,\"name\":\"communication.source.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.source.domain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"communication.source.domain.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"communication.source.domain\"}}},{\"count\":0,\"name\":\"communication.source.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.source.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.source.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"communication.source.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.category\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.exception.message\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.exception.stacktrace\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"event.exception.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.kind\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.result\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.source\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"event.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.client.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.flavor\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.request.body.content\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"http.request.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.request.id\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"http.request.id.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"http.request.id\"}}},{\"count\":0,\"name\":\"http.request.method\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.request.mime_type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.request.referrer\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.resent_count\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.response.body.content\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"http.response.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.response.id\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"http.response.id.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"http.response.id\"}}},{\"count\":0,\"name\":\"http.response.status_code\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.route\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.schema\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.target\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.url\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"http.user_agent\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"instrumentationScope.dropped_attributes_count\",\"type\":\"number\",\"esTypes\":[\"integer\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"instrumentationScope.name\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"instrumentationScope.name.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"instrumentationScope.name\"}}},{\"count\":0,\"name\":\"instrumentationScope.schemaUrl\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"instrumentationScope.schemaUrl.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"instrumentationScope.schemaUrl\"}}},{\"count\":0,\"name\":\"instrumentationScope.version\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"instrumentationScope.version.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"instrumentationScope.version\"}}},{\"count\":0,\"name\":\"observedTimestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"observerTime\",\"type\":\"date\",\"esTypes\":[\"date\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"schemaUrl\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"schemaUrl.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"schemaUrl\"}}},{\"count\":0,\"name\":\"severity.number\",\"type\":\"number\",\"esTypes\":[\"long\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"severity.text\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"severity.text.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"severity.text\"}}},{\"count\":0,\"name\":\"spanId\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"span_id\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"span_id.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"span_id\"}}},{\"count\":0,\"name\":\"traceId\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"count\":0,\"name\":\"trace_id\",\"type\":\"string\",\"esTypes\":[\"text\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"count\":0,\"name\":\"trace_id.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"trace_id\"}}}]","timeFieldName":"@timestamp","title":"ss4o_logs-nginx-*"},"id":"689b4f16-5275-4e1e-9835-91dd5e06161e","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2023-11-06T06:10:10.775Z","version":"WzExOSwxXQ=="}
+{"attributes":{"columns":["http.request.method","http.response.status_code"],"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"event.domain:nginx.access\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"sort":[],"title":"[NGINX Core Logs 1.0] Nginx Access Logs","version":1},"id":"78ce24fc-c71c-4f58-be16-6d736e788a80","migrationVersion":{"search":"7.9.3"},"references":[{"id":"689b4f16-5275-4e1e-9835-91dd5e06161e","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","updated_at":"2023-11-06T06:10:10.775Z","version":"WzEyMCwxXQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"savedSearchRefName":"search_0","title":"[NGINX Core Logs 1.0] Response codes over time","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[NGINX Core Logs 1.0] Response codes over time\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-24h\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"filters\",\"params\":{\"filters\":[{\"input\":{\"query\":\"http.response.status_code:[200 TO 299]\",\"language\":\"lucene\"},\"label\":\"200s\"},{\"input\":{\"query\":\"http.response.status_code:[300 TO 399]\",\"language\":\"lucene\"},\"label\":\"300s\"},{\"input\":{\"query\":\"http.response.status_code:[400 TO 499]\",\"language\":\"lucene\"},\"label\":\"400s\"},{\"input\":{\"query\":\"http.response.status_code:[500 TO 599]\",\"language\":\"lucene\"},\"label\":\"500s\"},{\"input\":{\"query\":\"http.response.status_code:0\",\"language\":\"lucene\"},\"label\":\"0\"}]},\"schema\":\"group\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}"},"id":"feb24bf8-f5e4-4f24-a9e0-c6618a8db3c3","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"78ce24fc-c71c-4f58-be16-6d736e788a80","name":"search_0","type":"search"}],"type":"visualization","updated_at":"2023-11-06T06:10:10.775Z","version":"WzEyMSwxXQ=="}
+{"attributes":{"columns":["_source"],"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"highlightAll\":true,\"query\":{\"query\":\"http.response.status_code >= 300 and event.domain:nginx.access\",\"language\":\"kuery\"},\"version\":true,\"highlight\":{\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"pre_tags\":[\"@kibana-highlighted-field@\"],\"require_field_match\":false,\"fragment_size\":2147483647},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"sort":[["@timestamp","desc"]],"title":"[NGINX Core Logs 1.0] Nginx Error Logs","version":1},"id":"aae90f71-83e6-4154-83f8-80185a58cde7","migrationVersion":{"search":"7.9.3"},"references":[{"id":"689b4f16-5275-4e1e-9835-91dd5e06161e","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","updated_at":"2023-11-06T06:10:10.775Z","version":"WzEyMiwxXQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"savedSearchRefName":"search_0","title":"[NGINX Core Logs 1.0] Errors over time","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[NGINX Core Logs 1.0] Errors over time\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-24h\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}},\"schema\":\"segment\"}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Count\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}}}"},"id":"bfa0e172-75fa-485d-aebd-b623713359b3","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"aae90f71-83e6-4154-83f8-80185a58cde7","name":"search_0","type":"search"}],"type":"visualization","updated_at":"2023-11-06T06:10:10.775Z","version":"WzEyMywxXQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"HTTP Top URLs","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"HTTP Top URLs\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"http.url\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"69b27677-9127-4581-9f1a-cc3a84822354","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"689b4f16-5275-4e1e-9835-91dd5e06161e","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2023-11-06T06:10:10.775Z","version":"WzEyNSwxXQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"savedSearchRefName":"search_0","title":"Data Volume","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Data Volume\",\"type\":\"area\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"params\":{\"field\":\"http.response.bytes\",\"customLabel\":\"Response Bytes\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-15m\",\"to\":\"now\"},\"useNormalizedOpenSearchInterval\":true,\"scaleMetricValues\":false,\"interval\":\"m\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"\"},\"schema\":\"segment\"}],\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Response Bytes\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"area\",\"mode\":\"stacked\",\"data\":{\"label\":\"Response Bytes\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"},\"labels\":{}}}"},"id":"de792cf1-b1f1-4705-890d-4206709c7360","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"78ce24fc-c71c-4f58-be16-6d736e788a80","name":"search_0","type":"search"}],"type":"visualization","updated_at":"2023-11-06T06:10:10.775Z","version":"WzEyNCwxXQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Status code dropdown","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Status code dropdown\",\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"controls\":[{\"id\":\"1700045798676\",\"fieldName\":\"http.response.status_code\",\"parent\":\"\",\"label\":\"Dropdown\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"size\":5,\"order\":\"desc\"},\"indexPatternRefName\":\"control_0_index_pattern\"}],\"updateFiltersOnChange\":false,\"useTimeFilter\":false,\"pinFilters\":false}}"},"id":"c4fcd310-83a5-11ee-8c8a-a1faaf8536ee","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"689b4f16-5275-4e1e-9835-91dd5e06161e","name":"control_0_index_pattern","type":"index-pattern"}],"type":"visualization","updated_at":"2023-11-15T10:57:29.280Z","version":"WzEyNywxXQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"savedSearchRefName":"search_0","title":"Transactions by API","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Transactions by API\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"http.url\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":500,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"},\"schema\":\"bucket\"},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\"http.response.status_code\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":500,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"\"},\"schema\":\"bucket\"}],\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"}}"},"id":"0e69fad0-76ec-11ee-8c8a-a1faaf8536ee","migrationVersion":{"visualization":"7.10.0"},"references":[{"id":"78ce24fc-c71c-4f58-be16-6d736e788a80","name":"search_0","type":"search"}],"type":"visualization","updated_at":"2023-11-16T05:08:59.573Z","version":"WzEzMCwxXQ=="}
+{"attributes":{"description":"Nginx dashboard with basic Observability on access / error logs","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"hidePanelTitles\":false},\"gridData\":{\"h\":8,\"i\":\"1f31e50b-06e3-41e6-972e-e4e5fe1a9872\",\"w\":48,\"x\":0,\"y\":15},\"panelIndex\":\"1f31e50b-06e3-41e6-972e-e4e5fe1a9872\",\"title\":\"HTTP Status Codes over Time\",\"version\":\"2.9.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"hidePanelTitles\":false},\"gridData\":{\"h\":9,\"i\":\"d91a8da4-b34b-470a-aca6-9c76b47cd6fb\",\"w\":24,\"x\":0,\"y\":23},\"panelIndex\":\"d91a8da4-b34b-470a-aca6-9c76b47cd6fb\",\"title\":\"HTTP Errors over Time\",\"version\":\"2.9.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"vis\":{\"sortColumn\":{\"colIndex\":0,\"direction\":\"asc\"}}},\"gridData\":{\"h\":15,\"i\":\"8e658e0d-7b64-4be8-8ad9-3b28eadf30f0\",\"w\":24,\"x\":24,\"y\":23},\"panelIndex\":\"8e658e0d-7b64-4be8-8ad9-3b28eadf30f0\",\"version\":\"2.9.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{\"hidePanelTitles\":false},\"gridData\":{\"h\":15,\"i\":\"4d8c2aa7-159c-4a1a-80ff-00a9299056ce\",\"w\":24,\"x\":0,\"y\":32},\"panelIndex\":\"4d8c2aa7-159c-4a1a-80ff-00a9299056ce\",\"title\":\"HTTP Data Volume\",\"version\":\"2.9.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"742783de-3ed5-4ba8-aafd-948220697bc6\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"742783de-3ed5-4ba8-aafd-948220697bc6\",\"version\":\"2.9.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"8f9de824-cffd-43d1-b59e-8912ec9da1c5\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"8f9de824-cffd-43d1-b59e-8912ec9da1c5\",\"version\":\"2.9.0\",\"panelRefName\":\"panel_5\"}]","refreshInterval":{"pause":true,"value":0},"timeFrom":"now-90d","timeRestore":true,"timeTo":"now","title":"Nginx Logs Overview","version":1},"id":"nginx-dashboard-1.0.0","migrationVersion":{"dashboard":"7.9.3"},"references":[{"id":"feb24bf8-f5e4-4f24-a9e0-c6618a8db3c3","name":"panel_0","type":"visualization"},{"id":"bfa0e172-75fa-485d-aebd-b623713359b3","name":"panel_1","type":"visualization"},{"id":"69b27677-9127-4581-9f1a-cc3a84822354","name":"panel_2","type":"visualization"},{"id":"de792cf1-b1f1-4705-890d-4206709c7360","name":"panel_3","type":"visualization"},{"id":"c4fcd310-83a5-11ee-8c8a-a1faaf8536ee","name":"panel_4","type":"visualization"},{"id":"0e69fad0-76ec-11ee-8c8a-a1faaf8536ee","name":"panel_5","type":"visualization"}],"type":"dashboard","updated_at":"2023-11-16T05:16:26.850Z","version":"WzEzMiwxXQ=="}
+{"attributes":{"description":"Getting started tutorial for Nginx & Fluent Bit agent collecting access logs and shipping into opensearch after transformation into SS4O logs specification","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Nginx-Flunent-Bit-Getting-Started","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Nginx-Flunent-Bit-Getting-Started\",\"type\":\"markdown\",\"aggs\":[],\"params\":{\"fontSize\":12,\"openLinksInNewTab\":false,\"markdown\":\"# Getting Started with Nginx Ingestion using Fluent Bit\\n\\nThis tutorial covers two different setups processes for getting started with Nginx ingestion: a live example using Docker and a self-managed setup with code snippets.\\n\\n## Live Example using Docker\\n\\n### Step 1: Create Docker Network\\nBefore running any Docker Compose files, create the Docker network.\\n```sh\\ndocker network create opensearch-net\\n```\\n\\n**Description**:\\nCreate a Docker network named opensearch-net for the OpenSearch and fluent-bit containers to communicate.\\nUse this specific command if your existing `opensearch` & `opensearch-dashboards` are already running within a docker-compose container.\\n\\nIf `opensearch` & `opensearch-dashboards` are running outside of a container scope - for example in your `localhost`, change the original docker network definition Into the following:\\n```yaml\\n network_mode: host\\n```\\n\\n### Step 2: Setup Docker `.env` File\\nDownload and set up the environment variables.\\n```sh\\nwget https://raw.githubusercontent.com/opensearch-project/opensearch-catalog/main/integrations/observability/nginx/getting-started/.env\\n```\\n\\n**Description**:\\nThe .env file contains environment variables required for Docker Compose to configure the OpenSearch and Fluent-Bit containers.\\n\\nUpdate the following parameters:\\n\\n```yaml\\n# OpenSearch Node1\\nOPENSEARCH_PORT=9200\\nOPENSEARCH_HOST=opensearch\\nOPENSEARCH_ADDR=${OPENSEARCH_HOST}:${OPENSEARCH_PORT}\\n\\n# OpenSearch Dashboard\\nOPENSEARCH_DASHBOARD_PORT=5601\\nOPENSEARCH_DASHBOARD_HOST=opensearch-dashboards\\nOPENSEARCH_DASHBOARD_ADDR=${OPENSEARCH_DASHBOARD_HOST}:${OPENSEARCH_DASHBOARD_PORT}\\n```\\n\\nIf running `opensearch` & `opensearch-dashboards` are running outside of a container scope - also update the host names `OPENSEARCH_HOST`, `OPENSEARCH_DASHBOARD_HOST` appearing in the .env file to be able to recognize your local running services.\\n\\n### Step 3: Setup Fluent Bit Folder\\nDownload the Fluent Bit configuration files.\\n```sh\\nwget https://raw.githubusercontent.com/opensearch-project/opensearch-catalog/main/integrations/observability/nginx/getting-started/fluent-bit/fluent-bit.conf \\\\\\n https://raw.githubusercontent.com/opensearch-project/opensearch-catalog/main/integrations/observability/nginx/getting-started/fluent-bit/otel-converter.lua \\\\\\n https://raw.githubusercontent.com/opensearch-project/opensearch-catalog/main/integrations/observability/nginx/getting-started/fluent-bit/parsers.conf\\n```\\n\\n**Description**:\\nGet the local fluent-bit relevant config files.\\n- Update the `Host` field to match the `opensearch` location - in case its not a part of a docker-compose service, or host name as defined by the docker-compose running your server\\n- Update the `Index` field to match the index naming specification as defined by the [simple schema for observability](https://github.com/opensearch-project/opensearch-catalog/blob/main/docs/schema/observability/Naming-convention.md).\\n\\n```yaml\\n\\n[OUTPUT]\\n Name opensearch\\n Match nginx.access\\n Host opensearch-node1\\n Port 9200\\n Index ss4o_logs-nginx-prod\\n Suppress_Type_Name On\\n tls On\\n tls.verify Off\\n HTTP_User admin\\n HTTP_Passwd my_%New%_passW0rd!@#\\n\\n[OUTPUT]\\n Name opensearch\\n Match apache.access\\n Host opensearch-node1\\n Port 9200\\n Index ss4o_logs-apache-prod\\n Suppress_Type_Name On\\n tls On\\n tls.verify Off\\n HTTP_User admin\\n HTTP_Passwd my_%New%_passW0rd!@#\\n\\n```\\n\\n\\n### Step 4: Run Docker Compose\\nDownload and run the Docker Compose file for the Nginx live example.\\n\\n```sh\\nwget -O nginx-node.yml https://raw.githubusercontent.com/opensearch-project/opensearch-catalog/main/integrations/observability/nginx/getting-started/nginx-node.yml\\n\\ndocker-compose -f nginx-node.yml up -d\\n```\\n**Description**:\\nRun the nginx-node docker compose after updating the `networks` definition to accommodate your existing `opensearch` service.\\n```yaml\\nnetworks:\\n opensearch-net:\\n external: true\\n```\\n\\n## Self-Managed Setup\\n\\nThe next part describe the details for manually updating the `fluent-bit` agent for running along-side the `nginx` service and transforming its logs\\ninto `simple schema for observability ` compliant json to be ingested into opensearch.\\n> All the files are present in the `getting-started` folder of this integration.\\n\\n### Step 1: Fluent Bit Parser\\nSet up the Fluent Bit parser configuration to parse Nginx access log fields.\\n\\n**parsers.conf**\\n```ini\\n[PARSER]\\n Name apache\\n Format regex\\n Regex ^(?[^ ]*) [^ ]* (?[^ ]*) \\\\[(?