使用例

以下に、1つのコンポーネントテンプレートとインデックステンプレートが作成されます。インデックステンプレートは2つのコンポーネントテンプレートを参照しますが、@packageのものだけが存在します。

コンポーネントテンプレートlogs-foo_component1を作成します。これはインデックステンプレートの前に作成する必要があります。これはオプションではありません:

Python

  1. resp = client.cluster.put_component_template(
  2. name="logs-foo_component1",
  3. template={
  4. "mappings": {
  5. "properties": {
  6. "host.name": {
  7. "type": "keyword"
  8. }
  9. }
  10. }
  11. },
  12. )
  13. print(resp)

Ruby

  1. response = client.cluster.put_component_template(
  2. name: 'logs-foo_component1',
  3. body: {
  4. template: {
  5. mappings: {
  6. properties: {
  7. 'host.name' => {
  8. type: 'keyword'
  9. }
  10. }
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.cluster.putComponentTemplate({
  2. name: "logs-foo_component1",
  3. template: {
  4. mappings: {
  5. properties: {
  6. "host.name": {
  7. type: "keyword",
  8. },
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT _component_template/logs-foo_component1
  2. {
  3. "template": {
  4. "mappings": {
  5. "properties": {
  6. "host.name": {
  7. "type": "keyword"
  8. }
  9. }
  10. }
  11. }
  12. }

次に、インデックステンプレートが作成され、2つのコンポーネントテンプレートを参照します:

JSON

  1. "composed_of": ["logs-foo_component1", "logs-foo_component2"]

以前は、logs-foo_component1コンポーネントテンプレートのみが作成されており、logs-foo_component2が欠けていました。このため、次のエントリが設定に追加されました:

JSON

  1. "ignore_missing_component_templates": ["logs-foo_component2"],

テンプレートの作成中に、logs-foo_component2が存在するかどうかは検証されません:

Python

  1. resp = client.indices.put_index_template(
  2. name="logs-foo",
  3. index_patterns=[
  4. "logs-foo-*"
  5. ],
  6. data_stream={},
  7. composed_of=[
  8. "logs-foo_component1",
  9. "logs-foo_component2"
  10. ],
  11. ignore_missing_component_templates=[
  12. "logs-foo_component2"
  13. ],
  14. priority=500,
  15. )
  16. print(resp)

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'logs-foo',
  3. body: {
  4. index_patterns: [
  5. 'logs-foo-*'
  6. ],
  7. data_stream: {},
  8. composed_of: [
  9. 'logs-foo_component1',
  10. 'logs-foo_component2'
  11. ],
  12. ignore_missing_component_templates: [
  13. 'logs-foo_component2'
  14. ],
  15. priority: 500
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "logs-foo",
  3. index_patterns: ["logs-foo-*"],
  4. data_stream: {},
  5. composed_of: ["logs-foo_component1", "logs-foo_component2"],
  6. ignore_missing_component_templates: ["logs-foo_component2"],
  7. priority: 500,
  8. });
  9. console.log(response);

コンソール

  1. PUT _index_template/logs-foo
  2. {
  3. "index_patterns": ["logs-foo-*"],
  4. "data_stream": { },
  5. "composed_of": ["logs-foo_component1", "logs-foo_component2"],
  6. "ignore_missing_component_templates": ["logs-foo_component2"],
  7. "priority": 500
  8. }

インデックステンプレートlogs-fooが正常に作成されました。このテンプレートに基づいてデータストリームを作成できます:

Python

  1. resp = client.indices.create_data_stream(
  2. name="logs-foo-bar",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.create_data_stream(
  2. name: 'logs-foo-bar'
  3. )
  4. puts response

Js

  1. const response = await client.indices.createDataStream({
  2. name: "logs-foo-bar",
  3. });
  4. console.log(response);

コンソール

  1. PUT _data_stream/logs-foo-bar

データストリームのマッピングを見てみると、host.nameフィールドが含まれています。

後の段階で、欠けているコンポーネントテンプレートが追加される可能性があります:

Python

  1. resp = client.cluster.put_component_template(
  2. name="logs-foo_component2",
  3. template={
  4. "mappings": {
  5. "properties": {
  6. "host.ip": {
  7. "type": "ip"
  8. }
  9. }
  10. }
  11. },
  12. )
  13. print(resp)

Ruby

  1. response = client.cluster.put_component_template(
  2. name: 'logs-foo_component2',
  3. body: {
  4. template: {
  5. mappings: {
  6. properties: {
  7. 'host.ip' => {
  8. type: 'ip'
  9. }
  10. }
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.cluster.putComponentTemplate({
  2. name: "logs-foo_component2",
  3. template: {
  4. mappings: {
  5. properties: {
  6. "host.ip": {
  7. type: "ip",
  8. },
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. PUT _component_template/logs-foo_component2
  2. {
  3. "template": {
  4. "mappings": {
  5. "properties": {
  6. "host.ip": {
  7. "type": "ip"
  8. }
  9. }
  10. }
  11. }
  12. }

これにより、データストリームに即座に影響はありません。マッピングhost.ipは、データストリームが次回自動的にロールオーバーされるか、手動ロールオーバーがトリガーされたときにのみデータストリームのマッピングに表示されます:

Python

  1. resp = client.indices.rollover(
  2. alias="logs-foo-bar",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.rollover(
  2. alias: 'logs-foo-bar'
  3. )
  4. puts response

Js

  1. const response = await client.indices.rollover({
  2. alias: "logs-foo-bar",
  3. });
  4. console.log(response);

コンソール

  1. POST logs-foo-bar/_rollover