This page was translated by the Cloud Translation API.
Switch to English

প্রমিথিউস সার্ভার থেকে লোড মেট্রিক্স

TensorFlow.org দেখুন গুগল Colab চালনা করুন GitHub থেকে উৎস দেখুন ডাউনলোড নোটবুক

সংক্ষিপ্ত বিবরণ

A থেকে এই টিউটোরিয়ালটি লোড CoreDNS মেট্রিক্স প্রমিথিউস একটি মধ্যে সার্ভার tf.data.Dataset , তারপর ব্যবহার tf.keras প্রশিক্ষণ ও অনুমান জন্য।

CoreDNS সেবা আবিষ্কারের উপর নজরদারি সঙ্গে একটি DNS সার্ভার, এবং ব্যাপকভাবে একটি অংশ হিসাবে মোতায়েন করা হয় Kubernetes ক্লাস্টার। যে কারণে এটা প্রায়ই ঘনিষ্ঠভাবে devops অপারেশন দ্বারা পর্যবেক্ষণ করা হয়।

এই টিউটোরিয়ালটি একটি উদাহরণ যে মেশিন লার্নিং মাধ্যমে তাদের অপারেশনে অটোমেশন খুঁজছেন devops দ্বারা ব্যবহার করা যেতে পারে।

সেটআপ এবং ব্যবহারের

প্রয়োজনীয় tensorflow-IO প্যাকেজ, এবং পুনর্সূচনা রানটাইম ইনস্টল করুন

 import os
 
 try:
  %tensorflow_version 2.x
except Exception:
  pass
 
TensorFlow 2.x selected.

pip install tensorflow-io
Requirement already satisfied: tensorflow-io in /usr/local/lib/python3.6/dist-packages (0.12.0)
Requirement already satisfied: tensorflow<2.2.0,>=2.1.0 in /tensorflow-2.1.0/python3.6 (from tensorflow-io) (2.1.0)
Requirement already satisfied: opt-einsum>=2.3.2 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (3.2.0)
Requirement already satisfied: google-pasta>=0.1.6 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.1.8)
Requirement already satisfied: tensorflow-estimator<2.2.0,>=2.1.0rc0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (2.1.0)
Requirement already satisfied: tensorboard<2.2.0,>=2.1.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (2.1.0)
Requirement already satisfied: wheel>=0.26; python_version >= "3" in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.34.2)
Requirement already satisfied: grpcio>=1.8.6 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.27.2)
Requirement already satisfied: astor>=0.6.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.8.1)
Requirement already satisfied: absl-py>=0.7.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.9.0)
Requirement already satisfied: termcolor>=1.1.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.1.0)
Requirement already satisfied: numpy<2.0,>=1.16.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.18.1)
Requirement already satisfied: keras-applications>=1.0.8 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.0.8)
Requirement already satisfied: protobuf>=3.8.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (3.11.3)
Requirement already satisfied: keras-preprocessing>=1.1.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.1.0)
Requirement already satisfied: wrapt>=1.11.1 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.12.0)
Requirement already satisfied: gast==0.2.2 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.2.2)
Requirement already satisfied: scipy==1.4.1; python_version >= "3" in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.4.1)
Requirement already satisfied: six>=1.12.0 in /tensorflow-2.1.0/python3.6 (from tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.14.0)
Requirement already satisfied: markdown>=2.6.8 in /tensorflow-2.1.0/python3.6 (from tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (3.2.1)
Requirement already satisfied: setuptools>=41.0.0 in /tensorflow-2.1.0/python3.6 (from tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (45.2.0)
Requirement already satisfied: werkzeug>=0.11.15 in /tensorflow-2.1.0/python3.6 (from tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.0.0)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /tensorflow-2.1.0/python3.6 (from tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.4.1)
Requirement already satisfied: google-auth<2,>=1.6.3 in /tensorflow-2.1.0/python3.6 (from tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.11.2)
Requirement already satisfied: requests<3,>=2.21.0 in /tensorflow-2.1.0/python3.6 (from tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (2.23.0)
Requirement already satisfied: h5py in /tensorflow-2.1.0/python3.6 (from keras-applications>=1.0.8->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (2.10.0)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /tensorflow-2.1.0/python3.6 (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.3.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /tensorflow-2.1.0/python3.6 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.2.8)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /tensorflow-2.1.0/python3.6 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (4.0.0)
Requirement already satisfied: rsa<4.1,>=3.1.4 in /tensorflow-2.1.0/python3.6 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (4.0)
Requirement already satisfied: certifi>=2017.4.17 in /tensorflow-2.1.0/python3.6 (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (2019.11.28)
Requirement already satisfied: idna<3,>=2.5 in /tensorflow-2.1.0/python3.6 (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (2.9)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /tensorflow-2.1.0/python3.6 (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (1.25.8)
Requirement already satisfied: chardet<4,>=3.0.2 in /tensorflow-2.1.0/python3.6 (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (3.0.4)
Requirement already satisfied: oauthlib>=3.0.0 in /tensorflow-2.1.0/python3.6 (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (3.1.0)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /tensorflow-2.1.0/python3.6 (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow<2.2.0,>=2.1.0->tensorflow-io) (0.4.8)

 from datetime import datetime

import tensorflow as tf
import tensorflow_io as tfio
 

ইনস্টল করুন এবং সেটআপ CoreDNS এবং প্রমিথিউস

ডেমো উদ্দেশ্যে, পোর্টের সাথে একটি CoreDNS সার্ভার স্থানীয়ভাবে 9053 খোলা ডিএনএস প্রশ্নের এবং পোর্ট গ্রহণ করতে 9153 চাঁচুনি জন্য মেট্রিক্স এক্সপোজ করতে (defult) খোলা। নিম্নলিখিত CoreDNS জন্য একটি মৌলিক Corefile কনফিগারেশন এবং পাওয়া যায় ডাউনলোড :

 .:9053 {
  prometheus
  whoami
}
 

ইনস্টলেশন সম্পর্কে আরো বিস্তারিত CoreDNS এর উপর পাওয়া যায়নি ডকুমেন্টেশন

 !curl -s -OL https://github.com/coredns/coredns/releases/download/v1.6.7/coredns_1.6.7_linux_amd64.tgz
!tar -xzf coredns_1.6.7_linux_amd64.tgz

!curl -s -OL https://raw.githubusercontent.com/tensorflow/io/master/docs/tutorials/prometheus/Corefile

!cat Corefile
 
.:9053 {
  prometheus
  whoami
}

 # Run `./coredns` as a background process.
# IPython doesn't recognize `&` in inline bash cells.
get_ipython().system_raw('./coredns &')
 

পরবর্তী ধাপে সেটআপ প্রমিথিউস সার্ভারে এবং পোর্টে উদ্ভাসিত হয় গেরো CoreDNS মেট্রিক্স থেকে প্রমিথিউস ব্যবহার 9153 উপরে থেকে। prometheus.yml কনফিগারেশনের জন্য ফাইলের জন্য পাওয়া যায় ডাউনলোড :

 !curl -s -OL https://github.com/prometheus/prometheus/releases/download/v2.15.2/prometheus-2.15.2.linux-amd64.tar.gz
!tar -xzf prometheus-2.15.2.linux-amd64.tar.gz --strip-components=1

!curl -s -OL https://raw.githubusercontent.com/tensorflow/io/master/docs/tutorials/prometheus/prometheus.yml

!cat prometheus.yml
 
global:
  scrape_interval:     1s
  evaluation_interval: 1s
alerting:
  alertmanagers:

  - static_configs:
    - targets:
rule_files:
scrape_configs:
- job_name: 'prometheus'
  static_configs:
  - targets: ['localhost:9090']
- job_name: "coredns"
  static_configs:
  - targets: ['localhost:9153']

 # Run `./prometheus` as a background process.
# IPython doesn't recognize `&` in inline bash cells.
get_ipython().system_raw('./prometheus &')
 

অর্ডার কিছু কর্মকান্ডের দেখানোর জন্য, dig কমান্ড CoreDNS সার্ভার যা সেটআপ হয়েছে বিরুদ্ধে আমার কয়েকটি ডিএনএস প্রশ্নের জেনারেট করতে ব্যবহার করা যেতে পারে:

sudo apt-get install -y -qq dnsutils
dig @127.0.0.1 -p 9053 demo1.example.org

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @127.0.0.1 -p 9053 demo1.example.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53868
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 855234f1adcb7a28 (echoed)
;; QUESTION SECTION:
;demo1.example.org.     IN  A

;; ADDITIONAL SECTION:
demo1.example.org.  0   IN  A   127.0.0.1
_udp.demo1.example.org. 0   IN  SRV 0 0 45361 .

;; Query time: 0 msec
;; SERVER: 127.0.0.1#9053(127.0.0.1)
;; WHEN: Tue Mar 03 22:35:20 UTC 2020
;; MSG SIZE  rcvd: 132


dig @127.0.0.1 -p 9053 demo2.example.org

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @127.0.0.1 -p 9053 demo2.example.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53163
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: f18b2ba23e13446d (echoed)
;; QUESTION SECTION:
;demo2.example.org.     IN  A

;; ADDITIONAL SECTION:
demo2.example.org.  0   IN  A   127.0.0.1
_udp.demo2.example.org. 0   IN  SRV 0 0 42194 .

;; Query time: 0 msec
;; SERVER: 127.0.0.1#9053(127.0.0.1)
;; WHEN: Tue Mar 03 22:35:21 UTC 2020
;; MSG SIZE  rcvd: 132


এখন একটি CoreDNS সার্ভার যার বৈশিষ্ট্যের মান একটি প্রমিথিউস সার্ভার দ্বারা স্ক্র্যাপযুক্ত এবং প্রস্তুত করা হয় TensorFlow গ্রাস হতে।

CoreDNS মেট্রিক্স জন্য ডেটা সেটটি তৈরি করুন এবং TensorFlow এটি ব্যবহার

CoreDNS থাকাকে যে পোস্টগ্রি সার্ভার থেকে পাওয়া যায় একটি ডেটাসেটের তৈরি করুন, সঙ্গে সম্পন্ন করা যেতে পারে tfio.experimental.IODataset.from_prometheus । minimium দুই আর্গুমেন্ট প্রয়োজন হয়। query মেট্রিক্স নির্বাচন করতে প্রমিথিউস সার্ভারে পাস করা হয়েছে এবং length ডেটা সেটটি মধ্যে সময়ের লোড করতে চান হয়।

আপনার সাথে শুরু করতে পারেন "coredns_dns_request_count_total" এবং "5" নিচে ডেটা সেটটি তৈরি করতে (সেকেন্ড)। যেহেতু টিউটোরিয়াল দুই ডিএনএস প্রশ্নের আগে পাঠানো হয়েছিল, এটা আশা করা হচ্ছে যে জন্য মেট্রিক্স "coredns_dns_request_count_total" হতে হবে "2.0" সময় সিরিজ শেষে:

 dataset = tfio.experimental.IODataset.from_prometheus(
      "coredns_dns_request_count_total", 5, endpoint="http://localhost:9090")


print("Dataset Spec:\n{}\n".format(dataset.element_spec))

print("CoreDNS Time Series:")
for (time, value) in dataset:
  # time is milli second, convert to data time:
  time = datetime.fromtimestamp(time // 1000)
  print("{}: {}".format(time, value['coredns']['localhost:9153']['coredns_dns_request_count_total']))
 
Dataset Spec:
(TensorSpec(shape=(), dtype=tf.int64, name=None), {'coredns': {'localhost:9153': {'coredns_dns_request_count_total': TensorSpec(shape=(), dtype=tf.float64, name=None)} } })

CoreDNS Time Series:
2020-03-03 22:35:17: 2.0
2020-03-03 22:35:18: 2.0
2020-03-03 22:35:19: 2.0
2020-03-03 22:35:20: 2.0
2020-03-03 22:35:21: 2.0

আরও ডেটাসেটের বৈশিষ্ট মধ্যে খুঁজছেন:

 (
  TensorSpec(shape=(), dtype=tf.int64, name=None),
  {
    'coredns': {
      'localhost:9153': {
        'coredns_dns_request_count_total': TensorSpec(shape=(), dtype=tf.float64, name=None)
      }
    }
  }
)

 

এটি সুস্পষ্ট যে ডেটা সেটটি একটি নিয়ে গঠিত (time, values) tuple যেখানে values ক্ষেত্র একটি পাইথন অভি মধ্যে প্রসারিত হল:

 "job_name": {
  "instance_name": {
    "metric_name": value,
  },
}
 

উপরের উদাহরণে, 'coredns' , কাজ নাম 'localhost:9153' উদাহরণ হিসেবে বলা যায় নাম, এবং 'coredns_dns_request_count_total' মেট্রিক নাম। নোট ব্যবহার প্রমিথিউস ক্যোয়ারী উপর নির্ভর করে, সম্ভব হতে পারে একাধিক কাজ / দৃষ্টান্ত / মেট্রিক্স ফিরে যেতে পারে। এই কারণে পাইথন অভি ডেটাসেটের গঠন ব্যবহৃত হয়েছে।

এক প্রশ্নের নিন "go_memstats_gc_sys_bytes" একটি উদাহরণ হিসাবে। যেহেতু উভয় CoreDNS এবং প্রমিথিউস Golang লিপিবদ্ধ আছে "go_memstats_gc_sys_bytes" মেট্রিক উভয় জন্য উপলব্ধ "coredns" চাকরি "prometheus" JOB:

 dataset = tfio.experimental.IODataset.from_prometheus(
    "go_memstats_gc_sys_bytes", 5, endpoint="http://localhost:9090")

print("Time Series CoreDNS/Prometheus Comparision:")
for (time, value) in dataset:
  # time is milli second, convert to data time:
  time = datetime.fromtimestamp(time // 1000)
  print("{}: {}/{}".format(
      time,
      value['coredns']['localhost:9153']['go_memstats_gc_sys_bytes'],
      value['prometheus']['localhost:9090']['go_memstats_gc_sys_bytes']))
 
Time Series CoreDNS/Prometheus Comparision:
2020-03-03 22:35:17: 2385920.0/2775040.0
2020-03-03 22:35:18: 2385920.0/2775040.0
2020-03-03 22:35:19: 2385920.0/2775040.0
2020-03-03 22:35:20: 2385920.0/2775040.0
2020-03-03 22:35:21: 2385920.0/2775040.0

নির্মিত Dataset প্রেরণ করার জন্য প্রস্তুত tf.keras সরাসরি পারেন প্রশিক্ষণ বা অনুমান উদ্দেশ্যে এখন।

মডেল প্রশিক্ষণের জন্য ব্যবহার করুন ডেটা সেটটি

মেট্রিক্স ডেটা সেটটি নির্মিত সঙ্গে, এটা সরাসরি ডেটা সেটটি পাস করা সম্ভব tf.keras মডেল প্রশিক্ষণ বা অনুমান জন্য।

ডেমো উদ্দেশ্যে, এই টিউটোরিয়াল মাত্র 1 বৈশিষ্ট্য এবং ইনপুট হিসাবে 2 পদক্ষেপ সঙ্গে একটি খুব সহজ LSTM মডেল ব্যবহার করব:

 n_steps, n_features = 2, 1
simple_lstm_model = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(8, input_shape=(n_steps, n_features)),
    tf.keras.layers.Dense(1)
])

simple_lstm_model.compile(optimizer='adam', loss='mae')

 

ডেটা সেটটি ব্যবহার করা 10 নমুনার সাথে CoreDNS জন্য 'go_memstats_sys_bytes' এর মান। যাইহোক, একটি সহচরী উইন্ডোতে যেহেতু window=n_steps এবং shift=1 গঠিত হয়, অতিরিক্ত নমুনা প্রয়োজন হয় (যে কোন দুই consecute উপাদানের জন্য প্রথম হিসাবে নেওয়া হয় x এবং দ্বিতীয় হিসাবে নেওয়া হয় y প্রশিক্ষণের জন্য)। মোট 10 + n_steps - 1 + 1 = 12 সেকেন্ড।

তথ্য মান এছাড়াও স্কেল করা হয় [0, 1]

 n_samples = 10

dataset = tfio.experimental.IODataset.from_prometheus(
    "go_memstats_sys_bytes", n_samples + n_steps - 1 + 1, endpoint="http://localhost:9090")

# take go_memstats_gc_sys_bytes from coredns job 
dataset = dataset.map(lambda _, v: v['coredns']['localhost:9153']['go_memstats_sys_bytes'])

# find the max value and scale the value to [0, 1]
v_max = dataset.reduce(tf.constant(0.0, tf.float64), tf.math.maximum)
dataset = dataset.map(lambda v: (v / v_max))

# expand the dimension by 1 to fit n_features=1
dataset = dataset.map(lambda v: tf.expand_dims(v, -1))

# take a sliding window
dataset = dataset.window(n_steps, shift=1, drop_remainder=True)
dataset = dataset.flat_map(lambda d: d.batch(n_steps))


# the first value is x and the next value is y, only take 10 samples
x = dataset.take(n_samples)
y = dataset.skip(1).take(n_samples)

dataset = tf.data.Dataset.zip((x, y))

# pass the final dataset to model.fit for training
simple_lstm_model.fit(dataset.batch(1).repeat(10),  epochs=5, steps_per_epoch=10)
 
Train for 10 steps
Epoch 1/5
10/10 [==============================] - 2s 150ms/step - loss: 0.8484
Epoch 2/5
10/10 [==============================] - 0s 10ms/step - loss: 0.7808
Epoch 3/5
10/10 [==============================] - 0s 10ms/step - loss: 0.7102
Epoch 4/5
10/10 [==============================] - 0s 11ms/step - loss: 0.6359
Epoch 5/5
10/10 [==============================] - 0s 11ms/step - loss: 0.5572

<tensorflow.python.keras.callbacks.History at 0x7f1758f3da90>

প্রশিক্ষিত মডেল উপরের মতো CoreDNS সার্ভার যা এই টিউটোরিয়াল সেটআপ হয়েছে কোনো কাজের চাপ নেই, বাস্তবে খুব দরকারী নয়। যাইহোক, এই ওয়ার্কিং পাইপলাইন যে সত্য প্রকাশনা সার্ভার থেকে মেট্রিক্স লোড করতে ব্যবহার করা যেতে পারে। মডেল তারপর devops অটোমেশন বাস্তব-জগতের সমস্যা সমাধানের জন্য উন্নত করা যেতে পারে।