mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
[Synthetics] Added alerts page (#190751)
## Summary Synthetics - add alerts page , it shows related alerts for selected monitor and location !! <img width="1717" alt="image" src="https://github.com/user-attachments/assets/590d2110-ad75-4c95-b413-496eff3a2544"> --------- Co-authored-by: shahzad31 <shahzad31comp@gmail.com>
This commit is contained in:
parent
9ff78cf08b
commit
398daa1231
11 changed files with 221 additions and 42 deletions
|
@ -12,6 +12,7 @@ export const MONITOR_NOT_FOUND_ROUTE = '/monitor-not-found/:monitorId';
|
|||
export const MONITOR_HISTORY_ROUTE = '/monitor/:monitorId/history';
|
||||
|
||||
export const MONITOR_ERRORS_ROUTE = '/monitor/:monitorId/errors';
|
||||
export const MONITOR_ALERTS_ROUTE = '/monitor/:monitorId/alerts';
|
||||
|
||||
export const MONITOR_ADD_ROUTE = '/add-monitor';
|
||||
|
||||
|
|
|
@ -119,21 +119,16 @@ journey('AlertingDefaults', async ({ page, params }) => {
|
|||
await page.click('.euiForm');
|
||||
await page.click('text=To: Email is required for selected email connector');
|
||||
});
|
||||
step(
|
||||
'Click .euiComboBox.euiComboBox--fullWidth.euiComboBox-isInvalid .euiFormControlLayout .euiFormControlLayout__childrenWrapper .euiComboBox__inputWrap',
|
||||
async () => {
|
||||
await page.click(
|
||||
'.euiComboBox.euiComboBox--fullWidth.euiComboBox-isInvalid .euiFormControlLayout .euiFormControlLayout__childrenWrapper .euiComboBox__inputWrap'
|
||||
);
|
||||
await page.fill(
|
||||
'text=To BccCombo box. Selected. Combo box input. Type some text or, to display a list >> input[role="combobox"]',
|
||||
'test@gmail.com'
|
||||
);
|
||||
await page.isDisabled('button:has-text("Apply changes")');
|
||||
await page.click('[aria-label="Account menu"]');
|
||||
await page.click('text=Log out');
|
||||
}
|
||||
);
|
||||
|
||||
step('Fill email fields', async () => {
|
||||
await page
|
||||
.getByTestId('toEmailAddressInput')
|
||||
.getByTestId('comboBoxSearchInput')
|
||||
.fill('test@gmail.com');
|
||||
await page.isDisabled('button:has-text("Apply changes")');
|
||||
await page.click('[aria-label="Account menu"]');
|
||||
await page.click('text=Log out');
|
||||
});
|
||||
|
||||
step('Login to kibana with readonly', async () => {
|
||||
await syntheticsApp.loginToKibana('viewer', 'changeme');
|
||||
|
|
|
@ -63,6 +63,9 @@ export const SyntheticsDatePicker = ({ fullWidth }: { fullWidth?: boolean }) =>
|
|||
refreshApp();
|
||||
}}
|
||||
onRefresh={refreshApp}
|
||||
updateButtonProps={{
|
||||
fill: false,
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { BASE_RAC_ALERTS_API_PATH } from '@kbn/rule-registry-plugin/common';
|
||||
import { AlertConsumers } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names';
|
||||
import { useFetcher } from '@kbn/observability-shared-plugin/public';
|
||||
import { useKibana } from '@kbn/kibana-react-plugin/public';
|
||||
import { useParams } from 'react-router-dom';
|
||||
import type { ESSearchResponse } from '@kbn/es-types';
|
||||
import { useSelectedLocation } from './use_selected_location';
|
||||
|
||||
import { ClientPluginsStart } from '../../../../../plugin';
|
||||
|
||||
export function useFetchActiveAlerts() {
|
||||
const { http } = useKibana<ClientPluginsStart>().services;
|
||||
|
||||
const { monitorId: configId } = useParams<{ monitorId: string }>();
|
||||
|
||||
const selectedLocation = useSelectedLocation();
|
||||
|
||||
const { loading, data } = useFetcher(async () => {
|
||||
return await http.post<ESSearchResponse>(`${BASE_RAC_ALERTS_API_PATH}/find`, {
|
||||
body: JSON.stringify({
|
||||
feature_ids: [AlertConsumers.UPTIME],
|
||||
size: 0,
|
||||
track_total_hits: true,
|
||||
query: {
|
||||
bool: {
|
||||
filter: [
|
||||
{
|
||||
range: {
|
||||
'@timestamp': {
|
||||
gte: 'now-24h/h',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
term: {
|
||||
configId,
|
||||
},
|
||||
},
|
||||
{
|
||||
term: {
|
||||
'location.id': selectedLocation?.id,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
}),
|
||||
});
|
||||
}, [configId, http, selectedLocation?.id]);
|
||||
|
||||
return {
|
||||
loading,
|
||||
data,
|
||||
numberOfAlerts: data?.hits?.total.value ?? 0,
|
||||
};
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
import React from 'react';
|
||||
import { EuiBadge } from '@elastic/eui';
|
||||
import { useFetchActiveAlerts } from '../hooks/use_fetch_active_alerts';
|
||||
|
||||
export const MonitorAlertsIcon = () => {
|
||||
const { numberOfAlerts } = useFetchActiveAlerts();
|
||||
|
||||
return numberOfAlerts > 0 ? <EuiBadge color="danger">{numberOfAlerts}</EuiBadge> : null;
|
||||
};
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiLoadingSpinner } from '@elastic/eui';
|
||||
import React from 'react';
|
||||
import { AlertConsumers } from '@kbn/rule-data-utils';
|
||||
import { useKibana } from '@kbn/kibana-react-plugin/public';
|
||||
import { useParams } from 'react-router-dom';
|
||||
import { useRefreshedRangeFromUrl } from '../../../hooks';
|
||||
import { SyntheticsDatePicker } from '../../common/date_picker/synthetics_date_picker';
|
||||
import { useSelectedLocation } from '../hooks/use_selected_location';
|
||||
import { ClientPluginsStart } from '../../../../../plugin';
|
||||
|
||||
export const MONITOR_ALERTS_TABLE_ID = 'xpack.observability.slo.sloDetails.alertTable';
|
||||
|
||||
export function MonitorDetailsAlerts() {
|
||||
const {
|
||||
triggersActionsUi: { alertsTableConfigurationRegistry, getAlertsStateTable: AlertsStateTable },
|
||||
observability: { observabilityRuleTypeRegistry },
|
||||
} = useKibana<ClientPluginsStart>().services;
|
||||
|
||||
const { monitorId: configId } = useParams<{ monitorId: string }>();
|
||||
|
||||
const selectedLocation = useSelectedLocation();
|
||||
const { from, to } = useRefreshedRangeFromUrl();
|
||||
|
||||
if (!selectedLocation) {
|
||||
return <EuiLoadingSpinner size="xl" />;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<EuiSpacer size="m" />
|
||||
<EuiFlexGroup direction="column" gutterSize="xl">
|
||||
<EuiFlexItem>
|
||||
<SyntheticsDatePicker fullWidth={true} />
|
||||
</EuiFlexItem>
|
||||
<EuiFlexItem>
|
||||
<AlertsStateTable
|
||||
alertsTableConfigurationRegistry={alertsTableConfigurationRegistry}
|
||||
configurationId={AlertConsumers.OBSERVABILITY}
|
||||
id={MONITOR_ALERTS_TABLE_ID}
|
||||
data-test-subj="monitorAlertsTable"
|
||||
featureIds={[AlertConsumers.UPTIME]}
|
||||
query={{
|
||||
bool: {
|
||||
filter: [
|
||||
{ term: { configId } },
|
||||
{ term: { 'location.id': selectedLocation?.id } },
|
||||
{ range: { '@timestamp': { gte: from, lte: to } } },
|
||||
],
|
||||
},
|
||||
}}
|
||||
showAlertStatusWithFlapping
|
||||
initialPageSize={100}
|
||||
cellContext={{ observabilityRuleTypeRegistry }}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
</EuiFlexGroup>
|
||||
</>
|
||||
);
|
||||
}
|
|
@ -9,7 +9,11 @@ import React, { useCallback } from 'react';
|
|||
import { useParams, useRouteMatch } from 'react-router-dom';
|
||||
import { useKibana } from '@kbn/kibana-react-plugin/public';
|
||||
import { useGetUrlParams } from '../../hooks';
|
||||
import { MONITOR_ERRORS_ROUTE, MONITOR_HISTORY_ROUTE } from '../../../../../common/constants';
|
||||
import {
|
||||
MONITOR_ALERTS_ROUTE,
|
||||
MONITOR_ERRORS_ROUTE,
|
||||
MONITOR_HISTORY_ROUTE,
|
||||
} from '../../../../../common/constants';
|
||||
import { ClientPluginsStart } from '../../../../plugin';
|
||||
import { PLUGIN } from '../../../../../common/constants/plugin';
|
||||
import { useSelectedLocation } from './hooks/use_selected_location';
|
||||
|
@ -28,6 +32,7 @@ export const MonitorDetailsLocation = ({ isDisabled }: { isDisabled?: boolean })
|
|||
|
||||
const isErrorsTab = useRouteMatch(MONITOR_ERRORS_ROUTE);
|
||||
const isHistoryTab = useRouteMatch(MONITOR_HISTORY_ROUTE);
|
||||
const isAlertsTab = useRouteMatch(MONITOR_ALERTS_ROUTE);
|
||||
|
||||
const params = `&dateRangeStart=${dateRangeStart}&dateRangeEnd=${dateRangeEnd}`;
|
||||
|
||||
|
@ -39,7 +44,11 @@ export const MonitorDetailsLocation = ({ isDisabled }: { isDisabled?: boolean })
|
|||
selectedLocation={selectedLocation}
|
||||
onChange={useCallback(
|
||||
(id, label) => {
|
||||
if (isErrorsTab) {
|
||||
if (isAlertsTab) {
|
||||
services.application.navigateToApp(PLUGIN.SYNTHETICS_PLUGIN_ID, {
|
||||
path: `/monitor/${monitorId}/alerts?locationId=${id}${params}`,
|
||||
});
|
||||
} else if (isErrorsTab) {
|
||||
services.application.navigateToApp(PLUGIN.SYNTHETICS_PLUGIN_ID, {
|
||||
path: `/monitor/${monitorId}/errors?locationId=${id}${params}`,
|
||||
});
|
||||
|
@ -53,7 +62,7 @@ export const MonitorDetailsLocation = ({ isDisabled }: { isDisabled?: boolean })
|
|||
});
|
||||
}
|
||||
},
|
||||
[isErrorsTab, isHistoryTab, monitorId, params, services.application]
|
||||
[isAlertsTab, isErrorsTab, isHistoryTab, monitorId, params, services.application]
|
||||
)}
|
||||
/>
|
||||
);
|
||||
|
|
|
@ -10,6 +10,8 @@ import React from 'react';
|
|||
import { useHistory, useRouteMatch } from 'react-router-dom';
|
||||
import { EuiIcon, EuiPageHeaderProps } from '@elastic/eui';
|
||||
import { FormattedMessage } from '@kbn/i18n-react';
|
||||
import { MonitorDetailsAlerts } from './monitor_alerts/monitor_detail_alerts';
|
||||
import { MonitorAlertsIcon } from './monitor_alerts/alerts_icon';
|
||||
import { RefreshButton } from '../common/components/refresh_button';
|
||||
import { MonitorNotFoundPage } from './monitor_not_found_page';
|
||||
import { MonitorDetailsPageTitle } from './monitor_details_page_title';
|
||||
|
@ -23,6 +25,7 @@ import { MonitorHistory } from './monitor_history/monitor_history';
|
|||
import { MonitorSummary } from './monitor_summary/monitor_summary';
|
||||
import { EditMonitorLink } from './monitor_summary/edit_monitor_link';
|
||||
import {
|
||||
MONITOR_ALERTS_ROUTE,
|
||||
MONITOR_ERRORS_ROUTE,
|
||||
MONITOR_HISTORY_ROUTE,
|
||||
MONITOR_NOT_FOUND_ROUTE,
|
||||
|
@ -67,6 +70,16 @@ export const getMonitorDetailsRoute = (
|
|||
dataTestSubj: 'syntheticsMonitorHistoryPage',
|
||||
pageHeader: getMonitorSummaryHeader(history, syntheticsPath, 'errors'),
|
||||
},
|
||||
{
|
||||
title: i18n.translate('xpack.synthetics.monitorErrors.title', {
|
||||
defaultMessage: 'Synthetics Monitor Alerts | {baseTitle}',
|
||||
values: { baseTitle },
|
||||
}),
|
||||
path: MONITOR_ALERTS_ROUTE,
|
||||
component: MonitorDetailsAlerts,
|
||||
dataTestSubj: 'syntheticsMonitorAlertsPage',
|
||||
pageHeader: getMonitorSummaryHeader(history, syntheticsPath, 'alerts'),
|
||||
},
|
||||
{
|
||||
title: i18n.translate('xpack.synthetics.monitorNotFound.title', {
|
||||
defaultMessage: 'Synthetics Monitor Not Found | {baseTitle}',
|
||||
|
@ -100,7 +113,7 @@ const getMonitorsBreadcrumb = (syntheticsPath: string) => ({
|
|||
const getMonitorSummaryHeader = (
|
||||
history: ReturnType<typeof useHistory>,
|
||||
syntheticsPath: string,
|
||||
selectedTab: 'overview' | 'history' | 'errors'
|
||||
selectedTab: 'overview' | 'history' | 'errors' | 'alerts'
|
||||
): EuiPageHeaderProps => {
|
||||
// Not a component, but it doesn't matter. Hooks are just functions
|
||||
const match = useRouteMatch<{ monitorId: string }>(MONITOR_ROUTE); // eslint-disable-line react-hooks/rules-of-hooks
|
||||
|
@ -112,17 +125,23 @@ const getMonitorSummaryHeader = (
|
|||
const search = history.location.search;
|
||||
const monitorId = match.params.monitorId;
|
||||
|
||||
const rightSideItems = [
|
||||
<RefreshButton />,
|
||||
<EditMonitorLink />,
|
||||
<RunTestManually />,
|
||||
<MonitorDetailsLastRun />,
|
||||
<MonitorDetailsStatus />,
|
||||
<MonitorDetailsLocation />,
|
||||
];
|
||||
if (selectedTab === 'alerts' || selectedTab === 'history' || selectedTab === 'errors') {
|
||||
// remove first item refresh button
|
||||
rightSideItems.shift();
|
||||
}
|
||||
|
||||
return {
|
||||
pageTitle: <MonitorDetailsPageTitle />,
|
||||
breadcrumbs: [getMonitorsBreadcrumb(syntheticsPath)],
|
||||
rightSideItems: [
|
||||
<RefreshButton />,
|
||||
<EditMonitorLink />,
|
||||
<RunTestManually />,
|
||||
<MonitorDetailsLastRun />,
|
||||
<MonitorDetailsStatus />,
|
||||
<MonitorDetailsLocation />,
|
||||
],
|
||||
rightSideItems,
|
||||
tabs: [
|
||||
{
|
||||
label: i18n.translate('xpack.synthetics.monitorOverviewTab.title', {
|
||||
|
@ -149,6 +168,15 @@ const getMonitorSummaryHeader = (
|
|||
href: `${syntheticsPath}${MONITOR_ERRORS_ROUTE.replace(':monitorId', monitorId)}${search}`,
|
||||
'data-test-subj': 'syntheticsMonitorErrorsTab',
|
||||
},
|
||||
{
|
||||
label: i18n.translate('xpack.synthetics.monitorAlertsTab.title', {
|
||||
defaultMessage: 'Alerts',
|
||||
}),
|
||||
prepend: <MonitorAlertsIcon />,
|
||||
isSelected: selectedTab === 'alerts',
|
||||
href: `${syntheticsPath}${MONITOR_ALERTS_ROUTE.replace(':monitorId', monitorId)}${search}`,
|
||||
'data-test-subj': 'syntheticsMonitorAlertsTab',
|
||||
},
|
||||
],
|
||||
};
|
||||
};
|
||||
|
|
|
@ -11131,8 +11131,8 @@
|
|||
"xpack.apm.serviceIcons.service": "Service",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.architecture": "Architecture",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.availabilityZoneLabel": "{zones, plural, =0 {Zone de disponibilité} one {Zone de disponibilité} other {Zones de disponibilité}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.functionNameLabel": "{functionNames, plural, =0 {Nom de fonction} one {Nom de fonction} other {Noms de fonction}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.faasTriggerTypeLabel": "{triggerTypes, plural, =0 {Type de déclencheur} one {Type de déclencheur} other {Types de déclencheurs}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.functionNameLabel": "{functionNames, plural, =0 {Nom de fonction} one {Nom de fonction} other {Noms de fonction}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.machineTypesLabel": "{machineTypes, plural, =0{Type de machine} one {Type de machine} other {Types de machines}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.projectIdLabel": "ID de projet",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.providerLabel": "Fournisseur cloud",
|
||||
|
@ -27088,8 +27088,8 @@
|
|||
"xpack.maps.source.esSearch.descendingLabel": "décroissant",
|
||||
"xpack.maps.source.esSearch.extentFilterLabel": "Filtre dynamique pour les données de la zone de carte visible",
|
||||
"xpack.maps.source.esSearch.fieldNotFoundMsg": "Impossible de trouver \"{fieldName}\" dans le modèle d'indexation \"{indexPatternName}\".",
|
||||
"xpack.maps.source.esSearch.geoFieldLabel": "Champ géospatial",
|
||||
"xpack.maps.source.esSearch.geofieldLabel": "Champ géospatial",
|
||||
"xpack.maps.source.esSearch.geoFieldLabel": "Champ géospatial",
|
||||
"xpack.maps.source.esSearch.geoFieldTypeLabel": "Type de champ géospatial",
|
||||
"xpack.maps.source.esSearch.indexOverOneLengthEditError": "Votre vue de données pointe vers plusieurs index. Un seul index est autorisé par vue de données.",
|
||||
"xpack.maps.source.esSearch.indexZeroLengthEditError": "Votre vue de données ne pointe vers aucun index.",
|
||||
|
@ -36554,8 +36554,8 @@
|
|||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.maxAlertsFieldLessThanWarning": "Kibana ne permet qu'un maximum de {maxNumber} {maxNumber, plural, =1 {alerte} other {alertes}} par exécution de règle.",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.nameFieldRequiredError": "Nom obligatoire.",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutrule.noteHelpText": "Ajouter un guide d'investigation sur les règles...",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupHelpText": "Fournissez des instructions sur les conditions préalables à la règle, telles que les intégrations requises, les étapes de configuration et tout ce qui est nécessaire au bon fonctionnement de la règle.",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutrule.setupHelpText": "Ajouter le guide de configuration de règle...",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupHelpText": "Fournissez des instructions sur les conditions préalables à la règle, telles que les intégrations requises, les étapes de configuration et tout ce qui est nécessaire au bon fonctionnement de la règle.",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupLabel": "Guide de configuration",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.tagFieldEmptyError": "Une balise ne doit pas être vide",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.threatIndicatorPathFieldEmptyError": "Le remplacement du préfixe d'indicateur ne peut pas être vide.",
|
||||
|
@ -42193,8 +42193,8 @@
|
|||
"xpack.slo.sloEmbeddable.config.sloSelector.placeholder": "Sélectionner un SLO",
|
||||
"xpack.slo.sloEmbeddable.displayName": "Aperçu du SLO",
|
||||
"xpack.slo.sloEmbeddable.overview.sloNotFoundText": "Le SLO a été supprimé. Vous pouvez supprimer sans risque le widget du tableau de bord.",
|
||||
"xpack.slo.sLOGridItem.targetFlexItemLabel": "Cible {target}",
|
||||
"xpack.slo.sloGridItem.targetFlexItemLabel": "Cible {target}",
|
||||
"xpack.slo.sLOGridItem.targetFlexItemLabel": "Cible {target}",
|
||||
"xpack.slo.sloGroupConfiguration.customFiltersLabel": "Personnaliser le filtre",
|
||||
"xpack.slo.sloGroupConfiguration.customFiltersOptional": "Facultatif",
|
||||
"xpack.slo.sloGroupConfiguration.customFilterText": "Personnaliser le filtre",
|
||||
|
@ -43640,8 +43640,8 @@
|
|||
"xpack.stackConnectors.components.casesWebhookxpack.stackConnectors.components.casesWebhook.connectorTypeTitle": "Webhook - Données de gestion des cas",
|
||||
"xpack.stackConnectors.components.d3security.bodyCodeEditorAriaLabel": "Éditeur de code",
|
||||
"xpack.stackConnectors.components.d3security.bodyFieldLabel": "Corps",
|
||||
"xpack.stackConnectors.components.d3Security.connectorTypeTitle": "D3 Security",
|
||||
"xpack.stackConnectors.components.d3security.connectorTypeTitle": "Données D3",
|
||||
"xpack.stackConnectors.components.d3Security.connectorTypeTitle": "D3 Security",
|
||||
"xpack.stackConnectors.components.d3security.eventTypeFieldLabel": "Type d'événement",
|
||||
"xpack.stackConnectors.components.d3security.invalidActionText": "Nom d'action non valide.",
|
||||
"xpack.stackConnectors.components.d3security.requiredActionText": "L'action est requise.",
|
||||
|
|
|
@ -11120,8 +11120,8 @@
|
|||
"xpack.apm.serviceIcons.service": "サービス",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.architecture": "アーキテクチャー",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.availabilityZoneLabel": "{zones, plural, other {可用性ゾーン}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.functionNameLabel": "{functionNames, plural, other {関数名}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.faasTriggerTypeLabel": "{triggerTypes, plural, other {トリガータイプ}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.functionNameLabel": "{functionNames, plural, other {関数名}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.machineTypesLabel": "{machineTypes, plural, other {コンピュータータイプ} }\n ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.projectIdLabel": "プロジェクト ID",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.providerLabel": "クラウドプロバイダー",
|
||||
|
@ -27076,8 +27076,8 @@
|
|||
"xpack.maps.source.esSearch.descendingLabel": "降順",
|
||||
"xpack.maps.source.esSearch.extentFilterLabel": "マップの表示範囲でデータを動的にフィルタリング",
|
||||
"xpack.maps.source.esSearch.fieldNotFoundMsg": "インデックスパターン''{indexPatternName}''に''{fieldName}''が見つかりません。",
|
||||
"xpack.maps.source.esSearch.geoFieldLabel": "地理空間フィールド",
|
||||
"xpack.maps.source.esSearch.geofieldLabel": "地理空間フィールド",
|
||||
"xpack.maps.source.esSearch.geoFieldLabel": "地理空間フィールド",
|
||||
"xpack.maps.source.esSearch.geoFieldTypeLabel": "地理空間フィールドタイプ",
|
||||
"xpack.maps.source.esSearch.indexOverOneLengthEditError": "データビューは複数のインデックスを参照しています。データビューごとに1つのインデックスのみが許可されています。",
|
||||
"xpack.maps.source.esSearch.indexZeroLengthEditError": "データビューはどのインデックスも参照していません。",
|
||||
|
@ -36537,8 +36537,8 @@
|
|||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.maxAlertsFieldLessThanWarning": "Kibanaで許可される最大数は、1回の実行につき、{maxNumber} {maxNumber, plural, other {アラート}}です。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.nameFieldRequiredError": "名前が必要です。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutrule.noteHelpText": "ルール調査ガイドを追加...",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupHelpText": "必要な統合、構成ステップ、ルールが正常に動作するために必要な他のすべての項目といった、ルール前提条件に関する指示を入力します。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutrule.setupHelpText": "ルールセットアップガイドを追加...",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupHelpText": "必要な統合、構成ステップ、ルールが正常に動作するために必要な他のすべての項目といった、ルール前提条件に関する指示を入力します。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupLabel": "セットアップガイド",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.tagFieldEmptyError": "タグを空にすることはできません",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.threatIndicatorPathFieldEmptyError": "インジケータープレフィックスの無効化を空にすることはできません",
|
||||
|
@ -42176,8 +42176,8 @@
|
|||
"xpack.slo.sloEmbeddable.config.sloSelector.placeholder": "SLOを選択",
|
||||
"xpack.slo.sloEmbeddable.displayName": "SLO概要",
|
||||
"xpack.slo.sloEmbeddable.overview.sloNotFoundText": "SLOが削除されました。ウィジェットをダッシュボードから安全に削除できます。",
|
||||
"xpack.slo.sLOGridItem.targetFlexItemLabel": "目標{target}",
|
||||
"xpack.slo.sloGridItem.targetFlexItemLabel": "目標{target}",
|
||||
"xpack.slo.sLOGridItem.targetFlexItemLabel": "目標{target}",
|
||||
"xpack.slo.sloGroupConfiguration.customFiltersLabel": "カスタムフィルター",
|
||||
"xpack.slo.sloGroupConfiguration.customFiltersOptional": "オプション",
|
||||
"xpack.slo.sloGroupConfiguration.customFilterText": "カスタムフィルター",
|
||||
|
@ -43619,8 +43619,8 @@
|
|||
"xpack.stackConnectors.components.casesWebhookxpack.stackConnectors.components.casesWebhook.connectorTypeTitle": "Webフック - ケース管理データ",
|
||||
"xpack.stackConnectors.components.d3security.bodyCodeEditorAriaLabel": "コードエディター",
|
||||
"xpack.stackConnectors.components.d3security.bodyFieldLabel": "本文",
|
||||
"xpack.stackConnectors.components.d3Security.connectorTypeTitle": "D3セキュリティ",
|
||||
"xpack.stackConnectors.components.d3security.connectorTypeTitle": "D3データ",
|
||||
"xpack.stackConnectors.components.d3Security.connectorTypeTitle": "D3セキュリティ",
|
||||
"xpack.stackConnectors.components.d3security.eventTypeFieldLabel": "イベントタイプ",
|
||||
"xpack.stackConnectors.components.d3security.invalidActionText": "無効なアクション名です。",
|
||||
"xpack.stackConnectors.components.d3security.requiredActionText": "アクションが必要です。",
|
||||
|
|
|
@ -11139,8 +11139,8 @@
|
|||
"xpack.apm.serviceIcons.service": "服务",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.architecture": "架构",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.availabilityZoneLabel": "{zones, plural, other {可用性区域}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.functionNameLabel": "{functionNames, plural, other {功能名称}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.faasTriggerTypeLabel": "{triggerTypes, plural, other {触发类型}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.functionNameLabel": "{functionNames, plural, other {功能名称}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.machineTypesLabel": "{machineTypes, plural, other {机器类型}} ",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.projectIdLabel": "项目 ID",
|
||||
"xpack.apm.serviceIcons.serviceDetails.cloud.providerLabel": "云服务提供商",
|
||||
|
@ -27108,8 +27108,8 @@
|
|||
"xpack.maps.source.esSearch.descendingLabel": "降序",
|
||||
"xpack.maps.source.esSearch.extentFilterLabel": "在可见地图区域中动态筛留数据",
|
||||
"xpack.maps.source.esSearch.fieldNotFoundMsg": "在索引模式“{indexPatternName}”中找不到“{fieldName}”。",
|
||||
"xpack.maps.source.esSearch.geoFieldLabel": "地理空间字段",
|
||||
"xpack.maps.source.esSearch.geofieldLabel": "地理空间字段",
|
||||
"xpack.maps.source.esSearch.geoFieldLabel": "地理空间字段",
|
||||
"xpack.maps.source.esSearch.geoFieldTypeLabel": "地理空间字段类型",
|
||||
"xpack.maps.source.esSearch.indexOverOneLengthEditError": "您的数据视图指向多个索引。每个数据视图只允许一个索引。",
|
||||
"xpack.maps.source.esSearch.indexZeroLengthEditError": "您的数据视图未指向任何索引。",
|
||||
|
@ -36579,8 +36579,8 @@
|
|||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.maxAlertsFieldLessThanWarning": "每次规则运行时,Kibana 最多只允许 {maxNumber} 个{maxNumber, plural, other {告警}}。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.nameFieldRequiredError": "名称必填。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutrule.noteHelpText": "添加规则调查指南......",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupHelpText": "提供有关规则先决条件的说明,如所需集成、配置步骤,以及规则正常运行所需的任何其他内容。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutrule.setupHelpText": "添加规则设置指南......",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupHelpText": "提供有关规则先决条件的说明,如所需集成、配置步骤,以及规则正常运行所需的任何其他内容。",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.setupLabel": "设置指南",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.tagFieldEmptyError": "标签不得为空",
|
||||
"xpack.securitySolution.detectionEngine.createRule.stepAboutRule.threatIndicatorPathFieldEmptyError": "指标前缀覆盖不得为空",
|
||||
|
@ -42220,8 +42220,8 @@
|
|||
"xpack.slo.sloEmbeddable.config.sloSelector.placeholder": "选择 SLO",
|
||||
"xpack.slo.sloEmbeddable.displayName": "SLO 概览",
|
||||
"xpack.slo.sloEmbeddable.overview.sloNotFoundText": "SLO 已删除。您可以放心从仪表板中删除小组件。",
|
||||
"xpack.slo.sLOGridItem.targetFlexItemLabel": "目标 {target}",
|
||||
"xpack.slo.sloGridItem.targetFlexItemLabel": "目标 {target}",
|
||||
"xpack.slo.sLOGridItem.targetFlexItemLabel": "目标 {target}",
|
||||
"xpack.slo.sloGroupConfiguration.customFiltersLabel": "定制筛选",
|
||||
"xpack.slo.sloGroupConfiguration.customFiltersOptional": "可选",
|
||||
"xpack.slo.sloGroupConfiguration.customFilterText": "定制筛选",
|
||||
|
@ -43667,8 +43667,8 @@
|
|||
"xpack.stackConnectors.components.casesWebhookxpack.stackConnectors.components.casesWebhook.connectorTypeTitle": "Webhook - 案例管理数据",
|
||||
"xpack.stackConnectors.components.d3security.bodyCodeEditorAriaLabel": "代码编辑器",
|
||||
"xpack.stackConnectors.components.d3security.bodyFieldLabel": "正文",
|
||||
"xpack.stackConnectors.components.d3Security.connectorTypeTitle": "D3 Security",
|
||||
"xpack.stackConnectors.components.d3security.connectorTypeTitle": "D3 数据",
|
||||
"xpack.stackConnectors.components.d3Security.connectorTypeTitle": "D3 Security",
|
||||
"xpack.stackConnectors.components.d3security.eventTypeFieldLabel": "事件类型",
|
||||
"xpack.stackConnectors.components.d3security.invalidActionText": "操作名称无效。",
|
||||
"xpack.stackConnectors.components.d3security.requiredActionText": "“操作”必填。",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue