پیش نیاز: اتصال به api server سی دی ان ستون (راهنمای اتصال)

با استفاده از Resource زیر می‌توانید تنظیمات مورد نظر خود را برای سرویس ارسال لاگ ستون اعمال کنید:

apiVersion: edge.sotoon.cloud/v1
kind: LogForwarder
metadata:
  name: unique-custom-name
  namespace: cdn-namespace
spec:
  enabled: false
  selector:
    name: cdn-name
    namespace: cdn-namespace #Optional
  sink:
    kind: "kafka|Amqp|Websocket|Elastic|Loki"
    amqp:
      exchange: exchange-name
      scheme: "amqp|amqps"
      username: username
      password: password
      host: "127.0.0.1|localhost"
      port: 5672
    kafka:
      topic: topic-name
      bootstrapServers:
        - hostname1:9092
        - hostname2:9092
        - hostname3:9092
    websocket:
      address: "wss://hostname:port/uri&token=secret
    elastic:
      addresses:
        - "https://hostname:9200"
        - "https://hostname:9201"
      index: "index_name"
      username: "username"
      password: "password"
  headerFilter:
    request:
      - user-agent
      - accept-encoding
      - cache-control
      - cookie
    response:
      - cache-control
      - content-encoding
      - content-type
      - date
      - etag
      - vary
  ratelimit:
    enabled: false
    rate: 10
    period: 1m
  encryption:
    enabled: false
    mode: "AES-128-CFB|AES-128-OFB|AES-128-CTR-LE"
    key: "must be 16 bytes"

توضیحات هریک از پارامترهای بالا در جدول زیر آورده شده‌اند:

metadata.name باید یک نام دلخواه اما یکتا برای لاگ‌فرواردر خود انتخاب کنید.

metadata.namespace نام Namespaceی که CDN در آن ساخته شده است را در این قسمت قرار دهید.

spec.selector.name در این قسمت باید نام CDNی که می‌خواهید لاگ‌فرواردر برای آن فعال شود را قرار دهید. هر CDN میتواند چند لاگ‌فرواردر داشته باشد.

spec.sink.kind نوع پروتکل Message Queue انتخابی خود را در این قسمت تعیین کنید. این فیلد می‌تواند Amqp یا Kafka یا Websocket یا Elastic باشد.

نکته

در مورد سینک های Amqp: در حال حاضر امکان انتخاب vhost در کانفیگ وجود ندارد و مسج ها به اکسچنجی که در vhost دیفالت وجود دارند ارسال می شود.

headerFilter

headerFilter.request: در این فیلد می توانید لیستی از نام هدر هایی که کلاینت ارسال می کند را مشخص کنید که در لاگ و در فیلد request_headers با انکودینگ json دریافت کنید.

headerFilter.response: در این فیلد می توانید لیستی از نام هدر هایی که آپستریم به cdn ارسال می کند را مشخص کنید که در لاگ و در فیلد response_headers با انکودینگ json دریافت کنید.

ratelimit با استفاده از این امکان می‌توانید میزان ارسال لاگ به سرور دریافت کننده خود را محدود کنید. واحدهای مورد قبول در فیلد period موارد زیر است:

  • ثانیه: s
  • دقیقه: m
  • ساعت: h

encryption با استفاده از این امکان می‌توانید برای امنیت بیشتر، لاگ‌های ارسالی را رمزگذاری کنید. در حال حاضر از پروتکل های رمزنگاری متقارن AES-128-CFB|AES-128-OFB|AES-128-CTR-LE پشتیبانی می‌شود. در فیلد key هم باید کلید ۱۶ بایتی خود را قرار دهید. این کلید را به صورت امن نگهداری کنید.

مثال: زبان Go

برای مثال در زبان Go به کمک کد زیر می‌توانید پیام رمزنگاری شده را باز کنید:

مثال: زبان Go برای رمزنگاری

برای مثال در زبان Go به کمک کد زیر می‌توانید پیام رمزنگاری شده را باز کنید:

func decrypt(encrypted []byte) ([]byte, error) {
	key := "must be 16 bytes"
 
	c, err := aes.NewCipher([]byte(key))
	if err != nil {
		return nil, err
	}
 
	gcm, err := cipher.NewGCM(c)
	if err != nil {
		return nil, err
	}
 
	nonce := make([]byte, gcm.NonceSize())
 
	return gcm.Open(nil, nonce, encrypted, nil)
}
توضیحمثال از مقدارنام
asn197207asn
ارائه دهنده اینترنتMobile Communication Company of Iran PLCaso
تعداد بایت های ارسالی410bytes_sent
وضعیت کشHIT|MISS|BYPASScache_status
connection148111278connection
connection_requests5connection_requests
continentAScontinent
countryIRcountry
ریکوئست توسط فایروال بلاک یا پاس شدهPASSED|BLOCKEDfw_blocked
اکشن فایروال مچ شده با ریکوئستRule actionfw_rule_action
نام فایروال مچ شده با ریکوئستRule namefw_rule_name
مقدار host ست شده در کانفیگ CDNsotoon.irhost
ایجنت درخواست کنندهokhttp/4.11.0http_user_agent
نام CDNsotoon-irname
نیم اسپیس CDNsotoonnamespace
prepare_time0.134prepare_time
remote_addr204.18.45.7remote_addr
remote_port58430remote_port
request_hostocean.sotoon.irrequest_host
request_id99270af816085c17077be8f7ae4a107arequest_id
request_length141request_length
request_methodPOSTrequest_method
request_uri/cdn/test-cdn/upstreamsrequest_uri
response_code200response_code
response_time0.134response_time
schemehttpsscheme
نام سرور CDN که به درخواست پاسخ دادهasiatech3|irancell4|mci2server
آی پی سرور CDN185.166.104.3server_addr
پورت سرور CDN443server_port
time_local10/Jan/2024:14:32:54 +0330time_local
upstream origin host:port86.104.33.81:443upstream_address
upstream_connect_time1upstream_connect_time
۱: اگر آپستریم به صورت صریح کد رنج ۵۰۰ به نود CDN ارسال کند۰: آپستریم به صورت صریح کد رنج ۵۰۰ به نود CDN ارسال نکرده0|1upstream_error_by_upstream
upstream_header_time1upstream_header_time
نام آپستریم مچ شده با ریکوئستbackendupstream_name
upstream_response_length114upstream_response_length
upstream_response_time0.134upstream_response_time
upstream_status200upstream_status
آی دی ورک اسپیس ستونbea4bbf7-247d-5757-b6aa-f0bee528c48kwsid
مقادیر هدرهای ریکوئست مشخص شده در کانفیگ لاگ فوروارد. این فیلد به صورت دیفالت مقداری ندارد.{    “user-agent”: “Mozilla”,    “accept-encoding”: “gzip”}request_headers
مقادیر هدرهای ریسپانس آپستریم مشخص شده در کانفیگ لاگ فوروارد. این فیلد به صورت دیفالت مقداری ندارد.{    “vary”: “accept-encoding”,    “content-encoding”: “br”}response_headers