

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan pipa OpenSearch Ingestion dengan Atlassian Services
<a name="configure-client-atlassian"></a>

Anda dapat menggunakan plugin sumber Atlassian Jira dan Confluence untuk menyerap data dari layanan Atlassian ke dalam pipeline Ingestion Anda. OpenSearch Integrasi ini memungkinkan Anda untuk membuat basis pengetahuan terpadu yang dapat dicari dengan menyinkronkan proyek Jira lengkap dan ruang Confluence, sambil mempertahankan relevansi waktu nyata melalui pemantauan berkelanjutan dan sinkronisasi pembaruan otomatis.

------
#### [ Integrating with Jira ]

Ubah pengalaman Jira Anda dengan kemampuan pencarian kontekstual yang kuat dengan mengintegrasikan konten Jira Anda ke dalamnya. OpenSearch Plugin sumber Data Prepper [Atlassian Jira](https://www.atlassian.com/software/jira) memungkinkan Anda membuat basis pengetahuan terpadu yang dapat dicari dengan menyinkronkan proyek Jira yang lengkap, sambil mempertahankan relevansi waktu nyata melalui pemantauan berkelanjutan dan sinkronisasi pembaruan otomatis. Integrasi ini memungkinkan sinkronisasi data dengan opsi pemfilteran fleksibel untuk proyek tertentu, jenis masalah, dan status, memastikan bahwa hanya informasi yang Anda butuhkan yang diimpor. 

Untuk memastikan konektivitas yang aman dan andal, plugin mendukung beberapa metode otentikasi, termasuk otentikasi dan OAuth2 otentikasi kunci API dasar, dengan keamanan tambahan untuk mengelola kredensil menggunakan rahasia yang disimpan di dalamnya. AWS Secrets Manager Ini juga dilengkapi pembaruan token otomatis untuk akses tanpa gangguan, memastikan operasi berkelanjutan. Dibangun di atas [API versi 2](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#version%22%3Eapi-version-2) Atlassian, integrasi ini memberdayakan tim untuk membuka wawasan berharga dari data Jira mereka melalui OpenSearch kemampuan pencarian lanjutan.

------
#### [ Integrating with Confluence ]

Tingkatkan kemampuan manajemen pengetahuan dan kolaborasi tim Anda dengan mengintegrasikan konten [Atlassian Confluence ke dalam plugin sumber Confluence](https://www.atlassian.com/software/confluence) OpenSearch Data Prepper. Integrasi ini memungkinkan Anda untuk membuat repositori pengetahuan kolektif yang terpusat dan dapat dicari, meningkatkan penemuan informasi dan produktivitas tim. Dengan menyinkronkan konten Confluence dan terus memantau pembaruan, plugin memastikan bahwa OpenSearch indeks Anda tetap up-to-date dan komprehensif. 

Integrasi ini menawarkan opsi pemfilteran yang fleksibel, memungkinkan Anda mengimpor konten secara selektif dari spasi atau jenis halaman tertentu, menyesuaikan konten yang disinkronkan dengan kebutuhan organisasi Anda. Plugin ini mendukung kunci API dasar dan metode OAuth2 otentikasi, dengan opsi mengelola kredensil dengan aman. AWS Secrets Manager Fitur pembaruan token otomatis plugin memastikan akses tanpa gangguan dan operasi yang mulus. Dibangun di atas Confluence [API](https://developer.atlassian.com/cloud/confluence/rest/v1/intro/#auth) Atlassian, integrasi ini memungkinkan tim untuk memanfaatkan OpenSearch kemampuan pencarian lanjutan di seluruh konten Confluence mereka, meningkatkan aksesibilitas informasi dan pemanfaatan dalam organisasi.

------

**Topics**
+ [Prasyarat](#atlassian-prerequisites)
+ [Konfigurasikan peran pipeline](#atlassian-pipeline-role)
+ [Konfigurasi pipa konektor Jira](#jira-connector-pipeline)
+ [Konfigurasi pipa konektor pertemuan](#confluence-connector-pipeline)
+ [Konsistensi data](#data-consistency)
+ [Batasan](#limitations)
+ [Metrik CloudWatch untuk konektor Atlassian](#metrics)
+ [Menghubungkan pipeline Amazon OpenSearch Ingestion ke Atlassian Jira atau Confluence menggunakan 2.0 OAuth](configure-client-atlassian-OAuth2-setup.md)

## Prasyarat
<a name="atlassian-prerequisites"></a>

Sebelum Anda membuat pipeline OpenSearch Ingestion Anda, selesaikan langkah-langkah berikut:

1. Siapkan kredensil untuk situs Jira Anda dengan memilih salah satu opsi berikut. OpenSearch Konsumsi hanya memerlukan `ReadOnly` otorisasi untuk konten.

   1. **Opsi 1: Kunci API** - Masuk ke akun Atlassian Anda dan gunakan informasi dalam topik berikut untuk menghasilkan kunci API Anda:
      + [Mengelola token API untuk akun Atlassian Anda](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/)

   1. **Opsi 2: OAuth2** — Masuk ke akun Atlassian Anda dan gunakan informasinya. [Menghubungkan pipeline Amazon OpenSearch Ingestion ke Atlassian Jira atau Confluence menggunakan 2.0 OAuth](configure-client-atlassian-OAuth2-setup.md)

1. [Buat rahasia AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) untuk menyimpan kredensil yang dibuat pada langkah sebelumnya. Buat pilihan berikut saat Anda mengikuti prosedur: 
   + Untuk **Tipe rahasia**, pilih **Tipe rahasia lainnya**.
   + Untuk pasangan **kunci/nilai, buat pasangan** berikut, tergantung pada jenis otorisasi yang Anda pilih: 

------
#### [ API key ]

   ```
   {
      "username": user-name-usualy-email-id,
      "password": api-key
   }
   ```

------
#### [ OAuth 2.0 ]

   ```
   {
      "clientId": client-id
      "clientSecret": client-secret
      "accessKey": access-key
      "refreshKey": refresh-key
   }
   ```

------

   Setelah Anda membuat rahasia, salin Amazon Resource Name (ARN) dari rahasianya. Anda akan memasukkannya ke dalam kebijakan izin peran pipeline.

## Konfigurasikan peran pipeline
<a name="atlassian-pipeline-role"></a>

Peran yang diteruskan dalam pipeline harus memiliki kebijakan berikut yang dilampirkan untuk membaca dan menulis ke rahasia yang dibuat di bagian prasyarat.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SecretReadWrite",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:PutSecretValue",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name-random-6-characters"
        }
    ]
}
```

------

Peran tersebut juga harus memiliki kebijakan yang dilampirkan untuk mengakses dan menulis ke wastafel pilihan Anda. Misalnya, jika Anda memilih OpenSearch sebagai wastafel, kebijakan terlihat mirip dengan yang berikut:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "OpenSearchWritePolicy",
            "Effect": "Allow",
            "Action": "aoss:*",
            "Resource": "arn:aws:aoss:us-east-1:111122223333:collection/collection-id"
        }
    ]
}
```

------

## Konfigurasi pipa konektor Jira
<a name="jira-connector-pipeline"></a>

Anda dapat menggunakan cetak biru Atlassian Jira yang telah dikonfigurasi sebelumnya untuk membuat pipeline ini. Untuk informasi selengkapnya, lihat [Bekerja dengan cetak biru](pipeline-blueprint.md).

Ganti *placeholder values* dengan informasi Anda sendiri.

```
version: "2"
extension:
  aws:
    secrets:
      jira-account-credentials:
        secret_id: "secret-arn"
        region: "secret-region"
        sts_role_arn: "arn:aws:iam::123456789012:role/Example-Role"
atlassian-jira-pipeline:
  source:
    jira:
      # We only support one host url for now
      hosts: ["jira-host-url"]
      acknowledgments: true
      authentication:
        # Provide one of the authentication method to use. Supported methods are 'basic' and 'oauth2'.
        # For basic authentication, password is the API key that you generate using your jira account
        basic:
          username: ${{aws_secrets:jira-account-credentials:username}}
          password: ${{aws_secrets:jira-account-credentials:password}}
        # For OAuth2 based authentication, we require the following 4 key values stored in the secret
        # Follow atlassian instructions at the below link to generate these keys.
        # https://developer.atlassian.com/cloud/confluence/oauth-2-3lo-apps/
        # If you are using OAuth2 authentication, we also require, write permission to your AWS secret to
        # be able to write the renewed tokens back into the secret.
        # oauth2:
          # client_id: ${{aws_secrets:jira-account-credentials:clientId}}
          # client_secret: ${{aws_secrets:jira-account-credentials:clientSecret}}
          # access_token: ${{aws_secrets:jira-account-credentials:accessToken}}
          # refresh_token: ${{aws_secrets:jira-account-credentials:refreshToken}}
      filter:
        project:
          key:
            include:
              # This is not project name.
              # It is an alphanumeric project key that you can find under project details in Jira.
              - "project-key"
              - "project-key"
            # exclude:
              # - "project-key"
              # - "project-key"
        issue_type:
          include:
            - "issue-type"
            # - "Story"
            # - "Bug"
            # - "Task"
         # exclude:
             # - "Epic"
        status:
          include:
            - "ticket-status"
            # - "To Do"
            # - "In Progress"
            # - "Done"
         # exclude:
           # - "Backlog"

  sink:
    - opensearch:
        # Provide an Amazon OpenSearch Service domain endpoint
        hosts: [ "https://search-mydomain-1a2a3a4a5a6a7a8a9a0a9a8a7a.us-east-1.es.amazonaws.com" ]
        index: "index_${getMetadata(\"project\")}"
        # Ensure adding unique document id which is the unique ticket id in this case
        document_id: '${/id}'
        aws:
          # Provide a Role ARN with access to the domain. This role should have a trust relationship with osis-pipelines.amazonaws.com
          sts_role_arn: "arn:aws:iam::123456789012:role/Example-Role"
          # Provide the region of the domain.
          region: "us-east-1"
          # Enable the 'serverless' flag if the sink is an Amazon OpenSearch Serverless collection
          serverless: false
          # serverless_options:
            # Specify a name here to create or update network policy for the serverless collection
            # network_policy_name: "network-policy-name"
        # Enable the 'distribution_version' setting if the Amazon OpenSearch Service domain is of version Elasticsearch 6.x
        # distribution_version: "es6"
        # Enable and switch the 'enable_request_compression' flag if the default compression setting is changed in the domain. 
        # See Mengompresi permintaan HTTP di Layanan Amazon OpenSearch
        # enable_request_compression: true/false
        # Optional: Enable the S3 DLQ to capture any failed requests in an S3 bucket. Delete this entire block if you don't want a DLQ.
        dlq:
          s3:
            # Provide an S3 bucket
            bucket: "your-dlq-bucket-name"
            # Provide a key path prefix for the failed requests
            # key_path_prefix: "kinesis-pipeline/logs/dlq"
            # Provide the region of the bucket.
            region: "us-east-1"
            # Provide a Role ARN with access to the bucket. This role should have a trust relationship with osis-pipelines.amazonaws.com
            sts_role_arn: "arn:aws:iam::123456789012:role/Example-Role"
```

Kunci atribut di sumber Jira:

1. **host**: Cloud Jira atau URL lokal Anda. Umumnya, sepertinya`https://your-domain-name.atlassian.net/`.

1. **ucapan terima kasih**: Untuk menjamin pengiriman data sampai ke wastafel.

1. **otentikasi**: Menjelaskan bagaimana Anda ingin pipeline mengakses instance Jira Anda. Pilih `Basic` atau `OAuth2` dan tentukan atribut kunci yang sesuai yang mereferensikan kunci dalam AWS rahasia Anda..

1. **filter**: Bagian ini membantu Anda memilih bagian mana dari data Jira Anda untuk mengekstrak dan menyinkronkan.

   1. **project**: Buat daftar kunci proyek yang ingin Anda sinkronkan di `include` bagian. Jika tidak, daftarkan proyek yang ingin Anda kecualikan di bawah `exclude` bagian. Berikan hanya satu opsi sertakan atau kecualikan pada waktu tertentu.

   1. **issue\$1type: Jenis** masalah khusus yang ingin Anda sinkronkan. Ikuti `exclude` pola serupa `include` atau yang sesuai dengan kebutuhan Anda. Perhatikan bahwa lampiran akan muncul sebagai tautan jangkar ke lampiran asli, tetapi konten lampiran tidak akan diekstraksi.

   1. **status**: Filter status tertentu yang ingin Anda terapkan untuk kueri ekstraksi data. Jika Anda menentukan`include`, hanya tiket dengan status tersebut yang akan disinkronkan. Jika Anda menentukan`exclude`, maka semua tiket kecuali yang memiliki status dikecualikan yang terdaftar akan disinkronkan.

## Konfigurasi pipa konektor pertemuan
<a name="confluence-connector-pipeline"></a>

Anda dapat menggunakan cetak biru Atlassian Confluence yang telah dikonfigurasi sebelumnya untuk membuat pipeline ini. Untuk informasi selengkapnya, lihat [Bekerja dengan cetak biru](pipeline-blueprint.md).

```
version: "2"
extension:
  aws:
    secrets:
      confluence-account-credentials:
        secret_id: "secret-arn"
        region: "secret-region"
        sts_role_arn: "arn:aws:iam::123456789012:role/Example-Role"
atlassian-confluence-pipeline:
  source:
    confluence:
      # We currently support only one host URL.
      hosts: ["confluence-host-url"]
      acknowledgments: true
      authentication:
        # Provide one of the authentication method to use. Supported methods are 'basic' and 'oauth2'.
        # For basic authentication, password is the API key that you generate using your Confluence account
        basic:
          username: ${{aws_secrets:confluence-account-credentials:confluenceId}}
          password: ${{aws_secrets:confluence-account-credentials:confluenceCredential}}
        # For OAuth2 based authentication, we require the following 4 key values stored in the secret
        # Follow atlassian instructions at the following link to generate these keys:
        # https://developer.atlassian.com/cloud/confluence/oauth-2-3lo-apps/
        # If you are using OAuth2 authentication, we also require write permission to your AWS secret to
        # be able to write the renewed tokens back into the secret.
        # oauth2:
          # client_id: ${{aws_secrets:confluence-account-credentials:clientId}}
          # client_secret: ${{aws_secrets:confluence-account-credentials:clientSecret}}
          # access_token: ${{aws_secrets:confluence-account-credentials:accessToken}}
          # refresh_token: ${{aws_secrets:confluence-account-credentials:refreshToken}}
      filter:
        space:
          key:
            include:
              # This is not space name.
              # It is a space key that you can find under space details in Confluence.
              - "space key"
              - "space key"
           # exclude:
             #  - "space key"
             #  - "space key"
        page_type:
          include:
            - "content type"
            # - "page"
            # - "blogpost"
            # - "comment"
         # exclude:
            # - "attachment"

  sink:
    - opensearch:
        # Provide an Amazon OpenSearch Service domain endpoint
        hosts: [ "https://search-mydomain-1a2a3a4a5a6a7a8a9a0a9a8a7a.us-east-1.es.amazonaws.com" ]
         index: "index_${getMetadata(\"space\")}"
        # Ensure adding unique document id which is the unique ticket ID in this case.
        document_id: '${/id}'
        aws:
          # Provide the Amazon Resource Name (ARN) for a role with access to the domain. This role should have a trust relationship with osis-pipelines.amazonaws.com.
          sts_role_arn: "arn:aws:iam::123456789012:role/Example-Role"
          # Provide the Region of the domain.
          region: "us-east-1"
          # Enable the 'serverless' flag if the sink is an Amazon OpenSearch Serverless collection
          serverless: false
          # serverless_options:
            # Specify a name here to create or update network policy for the serverless collection.
            # network_policy_name: "network-policy-name"
        # Enable the 'distribution_version' setting if the Amazon OpenSearch Service domain is of version Elasticsearch 6.x
        # distribution_version: "es6"
        # Enable and switch the 'enable_request_compression' flag if the default compression setting is changed in the domain. 
        # For more information, see Mengompresi permintaan HTTP di Layanan Amazon OpenSearch.
        # enable_request_compression: true/false
        # Optional: Enable the S3 DLQ to capture any failed requests in an S3 bucket. Delete this entire block if you don't want a DLQ.
        dlq:
          s3:
            # Provide an S3 bucket
            bucket: "your-dlq-bucket-name"
            # Provide a key path prefix for the failed requests
            # key_path_prefix: "kinesis-pipeline/logs/dlq"
            # Provide the Rregion of the bucket.
            region: "us-east-1"
            # Provide the Amazon Resource Name (ARN) for a role with access to the bucket. This role should have a trust relationship with osis-pipelines.amazonaws.com
            sts_role_arn: "arn:aws:iam::123456789012:role/Example-Role"
```

Atribut kunci dalam sumber Confluence:

1. **host**: Cloud Confluence atau URL lokal Anda. Secara umum, sepertinya `https://your-domain-name.atlassian.net/`

1. **ucapan terima kasih**: Untuk menjamin pengiriman data sampai ke wastafel.

1. **otentikasi**: Menjelaskan bagaimana Anda ingin pipeline mengakses instance Confluence Anda. Pilih `Basic` atau `OAuth2` dan tentukan atribut kunci yang sesuai yang mereferensikan kunci dalam AWS rahasia Anda.

1. **filter**: Bagian ini membantu Anda memilih bagian mana dari data Confluence Anda untuk mengekstrak dan menyinkronkan.

   1. **spasi**: Buat daftar tombol spasi yang ingin Anda sinkronkan di `include` bagian tersebut. Jika tidak, daftarkan spasi yang ingin Anda kecualikan di bawah `exclude` bagian. Berikan hanya satu opsi sertakan atau kecualikan pada waktu tertentu.

   1. **page\$1type: Jenis** halaman tertentu (seperti halaman, blogpost, atau lampiran) yang ingin Anda sinkronkan. Ikuti `exclude` pola serupa `include` atau yang sesuai dengan kebutuhan Anda. Perhatikan bahwa lampiran akan muncul sebagai tautan jangkar ke lampiran asli, tetapi konten lampiran tidak akan diekstraksi.

## Konsistensi data
<a name="data-consistency"></a>

Berdasarkan filter yang ditentukan dalam pipa YAMAL, proyek (atau spasi) yang dipilih akan diekstraksi sekali dan disinkronkan sepenuhnya ke wastafel target. Kemudian pemantauan perubahan berkelanjutan akan menangkap perubahan saat terjadi dan memperbarui data di wastafel. Satu pengecualian adalah bahwa pemantauan perubahan hanya disinkronkan `create` dan `update` tindakan, bukan `delete` tindakan.

## Batasan
<a name="limitations"></a>
+ Tindakan menghapus pengguna tidak akan disinkronkan. Data yang pernah direkam di wastafel akan tetap berada di wastafel. Pembaruan akan menimpa konten yang ada dengan perubahan baru jika pemetaan ID ditentukan dalam pengaturan sink.
+ Instans lokal yang menggunakan perangkat lunak Atlassian versi lama yang tidak mendukung hal berikut tidak APIs kompatibel dengan sumber ini:
  + Jira Search API versi 3
    + `rest/api/3/search`
    + `rest/api/3/issue`
  + Confluence
    + `wiki/rest/api/content/search`
    + `wiki/rest/api/content`
    + `wiki/rest/api/settings/systemInfo`

## Metrik CloudWatch untuk konektor Atlassian
<a name="metrics"></a>

**Jenis: Metrik konektor Jira**


| Sumber | Metrik | Jenis Metrik | 
| --- | --- | --- | 
| acknowledgementSetSuccesses.menghitung | Penghitung | Jika ucapan terima kasih diaktifkan, metrik ini memberikan jumlah tiket yang berhasil disinkronkan. | 
| acknowledgementSetFailures.menghitung | Penghitung | Jika ucapan terima kasih diaktifkan, metrik ini memberikan jumlah tiket yang gagal disinkronkan. | 
| Crawlingtime.avg | Timer | Waktu yang dibutuhkan untuk merangkak melalui semua perubahan baru. | 
| ticketFetchLatency.avg | Timer | Rata-rata latensi API pengambilan tiket. | 
| ticketFetchLatency.maks | Timer | Maksimum latensi API pengambilan tiket. | 
| TicketsRequested.count | Penghitung | Jumlah permintaan pengambilan tiket yang dibuat. | 
| ticketRequestedFailed.menghitung | Penghitung | Jumlah permintaan pengambilan tiket gagal. | 
| ticketRequestedSuccess.menghitung | Penghitung | Jumlah permintaan pengambilan tiket berhasil. | 
| searchCallLatency.avg | Timer | Cari rata-rata latensi panggilan API. | 
| searchCallLatency.maks | Timer | Cari latensi panggilan API maksimum. | 
| searchResultsFound.menghitung | Penghitung | Jumlah item yang ditemukan dalam panggilan pencarian tertentu. | 
| searchRequestFailed.menghitung | Penghitung | Kegagalan panggilan API pencarian dihitung. | 
| AuthFailures.count | Penghitung | Jumlah kegagalan otentikasi. | 

**Jenis: Metrik konektor pertemuan**


| Sumber | Metrik | Jenis Metrik | 
| --- | --- | --- | 
| acknowledgementSetSuccesses.menghitung | Penghitung | Jika ucapan terima kasih diaktifkan, metrik ini memberikan jumlah halaman yang berhasil disinkronkan. | 
| acknowledgementSetFailures.menghitung | Penghitung | Jika ucapan terima kasih diaktifkan, metrik ini memberikan jumlah halaman yang gagal disinkronkan. | 
| Crawlingtime.avg | Timer | Waktu yang dibutuhkan untuk merangkak melalui semua perubahan baru. | 
| pageFetchLatency.avg | Timer | Latensi API pengambilan konten (rata-rata). | 
| pageFetchLatency.maks | Timer | Latensi API pengambilan konten (maksimum). | 
| PagesRequested.count | Penghitung | Jumlah pemanggilan API pengambilan konten. | 
| pageRequestFailed.menghitung | Penghitung | Jumlah permintaan API pengambilan konten yang gagal. | 
| pageRequestedSuccess.menghitung | Penghitung | Jumlah permintaan API pengambilan konten yang berhasil. | 
| searchCallLatency.avg | Timer | Cari rata-rata latensi panggilan API. | 
| searchCallLatency.maks | Timer | Cari latensi panggilan API maks. | 
| searchResultsFound.menghitung | Penghitung | Jumlah item yang ditemukan dalam panggilan pencarian tertentu. | 
| searchRequestsFailed.menghitung | Penghitung | Kegagalan panggilan API pencarian dihitung. | 
| AuthFailures.count | Penghitung | Jumlah kegagalan otentikasi. | 