پیکربندیهای معیارها، کمپینهای تلهمتری را که سرویس تلهمتری اجرا میکند، تعریف میکنند. پیکربندی معیارها نمونهای از پیام بافر پروتکل MetricsConfig (protobuf) است. پیکربندیهای معیارها نحوه جمعآوری، پردازش و گزارش دادهها را مشخص میکنند. تولیدکنندگان اصلی تجهیزات (OEM) میتوانند پیکربندیهای معیارها را از طریق API سرویس تلهمتری فعال کنند. چندین پیکربندی میتوانند همزمان اجرا شوند.
قبل از شروع، با معماری SDV آشنا شوید، که یک معماری سرویسگرا است که در آن سرویسها دادهها را به عنوان پیامهای protobuf منتشر میکنند. این پیامها با استفاده از پشته ارتباطی SDV از طریق RPC یا انتشار-اشتراک ارتباط برقرار میکنند.
اصطلاحات کلیدی
پیکربندی معیارها، جمعآوری دادهها را با تعریف منابع داده، قوانین پردازش و مکانیسمهای گزارشدهی هماهنگ میکند. یکی از مزایای اصلی این پردازش لبهای، کاهش استفاده از دادههای تلفن همراه است. با پردازش دادههای با فرکانس بالا روی دستگاه و آپلود فقط دادههای تجمیعی یا بینشها، میزان دادههای منتقل شده به ابر را به میزان قابل توجهی کاهش میدهید.
تعریف پیکربندی متریکها با فهرست کردن منابع داده برای استفاده در پیکربندی آغاز میشود. اینها سرویسهایی هستند که دادهها را از طریق پشته ارتباطی SDV در دسترس قرار میدهند. وقتی یک پیکربندی را فعال میکنید، سرویس تلهمتری به این منابع متصل میشود تا در صورت نیاز دادهها را پخش یا دریافت کند.
هسته یک پیکربندی، قابلیت پردازش دادههای لبهای آن است که از طریق تجمیعکنندههای دادهی حالتمند مدیریت میشود. هر تجمیعکننده از یک سازندهی پیام استفاده میکند که یک نمونه پیام اولیهی حالتمند را نگهداری میکند. هر فیلد در این پیام با ارزیابی یک عبارت پر میشود و تعریف میکند که کدام دادهها باید از منابع داده یا تجمیعکنندههای دیگر خوانده شوند و کدام عملیات ریاضی، منطقی یا تجمیع روی دادهها اعمال شود. میتوانید تجمیعهای اضافی را روی نتیجهی یک عبارت اعمال کنید.
تریگرها (Triggers) برای کنترل این فرآیند نقش اساسی دارند. آنها میتوانند به صورت دورهای، در پاسخ به دادههای جدید یا زمانی که شرایط مبتنی بر داده برآورده میشوند، فعال شوند. تریگرها تعیین میکنند که تجمیعکنندهها چه زمانی سازنده پیام خود را ارزیابی کنند، چه زمانی گزارشهای معیار تولید شوند و میتوانند بر چرخه حیات پیکربندی تأثیر بگذارند، به عنوان مثال، با شروع یا توقف جمعآوری دادهها.
گزارشهای معیارها، خروجی نهایی هستند. هر گزارش شامل بار دادهای است که توسط یک سازنده پیام تعریف شده است، به همراه فرادادههایی مانند مهرهای زمانی و شناسه گزارش. میتوانید گزارشها را در لحظات خاص چرخه عمر پیکربندی، مانند زمانی که یک پیکربندی فعال یا غیرفعال میشود، تولید کنید. گزارشهای تولید شده در حافظه ذخیره میشوند و از طریق کانال اعلان وضعیت گزارش، به کلاینت برای بازیابی اطلاع داده میشود.
شکل زیر یک مثال مفهومی از چگونگی تعامل اجزا در یک پیکربندی معیارها ارائه میدهد:

شکل ۱. منابع داده، پردازش و گزارشدهی در پیکربندی معیارها.
اجزای پیکربندی معیارها
شما میتوانید از پیکربندیهای معیارها برای تعریف وظایف جمعآوری دادهها و خطوط لوله پردازش پیچیده روی دستگاه استفاده کنید. این بخش، اجزای اصلی مورد استفاده برای تعریف یک کمپین معیارها را شرح میدهد. این اجزا به ترتیب جریان دادهها در سیستم، از ورودی به خروجی، ارائه میشوند. میتوانید این اجزا را به هر ترتیبی تعریف کنید. پردازش دادهها با تجمیعکنندهها و مدیریت چرخه عمر اختیاری است.
- تعریف منابع داده
- پردازش دادهها با تجمیعکنندهها
- کنترل جریان اجرا با تریگرها
- گزارشهای معیارها را ایجاد کنید
- مدیریت چرخه حیات جمعآوری دادهها
تعریف منابع داده
پایه و اساس هر کمپین متریک، داده است. در پیکربندی متریک، مکانیسم دریافت داده انتزاعی است و شما فقط باید نامی را که میتوان منبع داده را با آن شناسایی کرد و نحوه اتصال (اشتراک یا بنا به تقاضا) را مشخص کنید. منابع داده میتوانند هر سرویسی باشند که دادهها را از طریق پشته ارتباطات SDV در دسترس قرار میدهد یا خود را در رجیستری ناشر قابل تنظیم ثبت میکند، که امکان جمعآوری دادهها از برنامههایی را که میانافزار SDV در دسترس نیست، فراهم میکند. هر منبع داده باید یک نام منحصر به فرد در پیکربندی داشته باشد تا بتواند توسط سایر اجزای پیکربندی متریک مانند محرکها یا تجمیعکنندهها به آن ارجاع داده شود. میتوانید نحوه اتصال، تعداد دفعات دریافت دادهها و ارائه یک شیء پیکربندی خاص سرویس را پیکربندی کنید.
پیکربندی منابع داده
سرویس تلهمتری میتواند به دو روش به یک منبع داده متصل شود:
- Getter: این متد، هر زمان که یک عبارت تعریفشده در پیکربندی متریک نیاز به خواندن دادهها از این منبع داشته باشد، دادهها را بر اساس تقاضا واکشی میکند. این برای منابع دادهای که جریان مداومی ارائه نمیدهند یا زمانی که به عکسهای لحظهای از دادهها نیاز دارید، مفید است.
- اشتراک: این روش پیشفرض است. این روش یک جریان داده پیوسته از منبع ایجاد میکند. اگر قصد دارید از یک تریگر داده استفاده کنید که هنگام رسیدن پیامهای جدید از این منبع فعال میشود، این نوع اتصال مورد نیاز است.
وقتی از اشتراک استفاده میکنید، میتوانید موارد زیر را پیکربندی کنید:
- نمونهبرداری فرعی: برای جلوگیری از دریافت بیش از حد دادهها، میتوانید حداقل فاصله زمانی بین پیامهای متوالی از یک منبع را تعریف کنید. اگر منبع دادهها را سریعتر از این فاصله زمانی منتشر کند، سرویس تلهمتری اعلانها را محدود میکند و محرکهای داده فقط برای پیامهای دریافتی پس از محدودسازی فعال میشوند. این کار به طور مؤثر دادهها را نمونهبرداری فرعی میکند.
- بازیابی اولیه پیام: میتوانید سرویس را طوری پیکربندی کنید که هنگام برقراری اشتراک، جدیدترین پیام را از منبع بازیابی کند. در نتیجه، در صورت وجود مقدار، منبع داده بلافاصله با آن پر میشود، به جای اینکه منتظر انتشار اولین پیام جدید باشد. این قابلیت در تریگرهای شرطی یا تجمیعکنندههایی که به یک وضعیت اولیه نیاز دارند یا زمانی که منبع داده به ندرت منتشر میشود، مفید است.
صرف نظر از نوع، پیامها به صورت داخلی ذخیره میشوند. اگر چندین عبارت یا تجمیعکننده در طول یک چرخه ارزیابی واحد به دادهها از یک منبع نیاز داشته باشند، سیستم دادهها را فقط یک بار، یا از حافظه پنهان در صورت رسیدن پیام جدید با استفاده از اشتراک، یا با استفاده از یک فراخوانی بنا به تقاضا، دریافت میکند.
پردازش دادهها با تجمیعکنندهها
در حالی که منابع داده، دادههای خام را ارائه میدهند، تجمیعکنندهها پردازش دادههای لبهای و حالتمند را انجام میدهند. آنها دادهها را از منابع داده یا سایر تجمیعکنندهها دریافت میکنند، آن را تبدیل میکنند و نتیجه را برای خواندن توسط گزارشهای معیار یا پردازش بیشتر توسط سایر تجمیعکنندهها در دسترس قرار میدهند. این امر امکان ساخت خطوط لوله پردازش چند مرحلهای را فراهم میکند، به عنوان مثال، محاسبه آمار سرعت در یک تجمیعکننده و استفاده از آن آمار در مؤلفه دیگری که الگوهای رفتار رانندگی را تشخیص میدهد.
تجمیعکنندهها برای انجام محاسبات خود توسط یک یا چند محرک فعال میشوند. هر بار که یکی از محرکهای آن فعال میشود، تجمیعکننده قوانین خود را ارزیابی کرده و وضعیت داخلی خود را بهروزرسانی میکند.
شما میتوانید یک تجمیعکننده را طوری پیکربندی کنید که پس از خوانده شدن مقدارش توسط یک جزء دیگر، وضعیت خود را بازنشانی کند، که این امر برای محاسبه آمار در پنجرههای زمانی غیر همپوشانی مفید است.
یک سازنده پیام، ساختار و منطق یک تجمیعکننده را تعریف میکند. یک سازنده پیام، نحوه ساخت یک نمونه از یک پیام اولیه را با توصیف نحوه تولید داده برای هر یک از فیلدهای آن مشخص میکند. برای هر فیلد، یک عبارت، نحوه خواندن دادهها از منابع داده و تجمیعکنندهها و اعمال عملیات بر روی این دادهها را تعریف میکند. علاوه بر این، میتوانید یک تجمیع اعمال کنید، که یک عملیات محاسبه یا جمعآوری است که در طول زمان بر روی نتایج عبارت اعمال میشود.
انواع تجمیع زیر پشتیبانی میشوند:
- ریاضی: آمار (میانگین، حداقل، حداکثر، مجموع، انحراف معیار و دلتا) را روی مقادیر برگردانده شده توسط یک عبارت در هر تریگر محاسبه میکند. دلتا تفاوت بین مقدار عددی فعلی و قبلی برگردانده شده توسط یک عبارت است.
- لیست: مقادیر برگردانده شده توسط یک عبارت را در یک لیست جمع آوری میکند. میتوانید اندازه لیست را محدود کنید تا یک پنجره غلتان (بافر حلقهای) از مقادیر اخیر ایجاد شود.
- تعداد: حالت خاصی که هیچ عبارتی مشخص نشده است. تعداد دفعاتی که فیلد ارزیابی میشود را میشمارد (یعنی، چند بار تجمیعکننده یا گزارش فعال میشود).
- عبور: از نتیجه یک عبارت مستقیماً و بدون اعمال تجمیع استفاده میکند. این در پیکربندیهای گزارش برای دسترسی به مقادیر نهایی از تجمیعکنندهها مفید است.
شکل زیر یک نمودار مفهومی است که ارزیابی تجمیعکننده را نشان میدهد:

شکل 2. ارزیابی تجمیعکننده.
انجام محاسبات یا تعریف شرایط با استفاده از عبارات
عبارات در سازندگان پیام و محرکهای شرطی برای انجام محاسبات یا تعریف شرایط استفاده میشوند. هنگام استفاده از مولد پیکربندی متریک (MCG) برای نوشتن اشیاء JSON پیکربندی متریک، عبارات به صورت رشتههای قابل خواندن توسط انسان نوشته میشوند که از نمادگذاری نقطه برای دسترسی به فیلدهای منبع داده (به عنوان مثال، vehicle_speed.speed_value ) استفاده میکنند و طیف وسیعی از عملیات را اعمال میکنند. MCG این رشتهها را به یک ساختار درختی بهینه، مشابه یک درخت نحوی انتزاعی (AST)، برای ارزیابی کارآمد روی دستگاه در پیام نهایی MetricsConfig protobuf ترجمه میکند.
عملگرها و توابع
عبارات از مجموعه عملگرها و توابع زیر پشتیبانی میکنند:
- حساب: از جمع، تفریق (دودویی و یگانی)، ضرب، تقسیم، مدول و توان پشتیبانی میکند.
- منطقی: از AND، OR، NOT و XOR پشتیبانی میکند.
- رابطهای: از بررسی برابری و مقایسه بزرگتر و کوچکتر پشتیبانی میکند.
- لیست: بررسی میکند که آیا یک لیست شامل یک مقدار خاص است یا خیر.
- مهر زمان: مهر زمان را در زمان ارزیابی بر حسب میکروثانیه برمیگرداند. نوع ساعت میتواند ساعت بیدرنگ، زمان یکنواخت از زمان بوت (شامل زمان تعلیق) یا زمان یکنواخت از زمان بوت یا آخرین از سرگیری باشد.
- قدر مطلق: قدر مطلق یک عدد را برمیگرداند.
- گرد کردن: به نزدیکترین عدد صحیح گرد میکند (
round)، بزرگترین عدد صحیح کوچکتر یا مساوی یک عدد را برمیگرداند (floor)، یا کوچکترین عدد صحیح بزرگتر یا مساوی یک عدد را برمیگرداند (ceil).
در اینجا یک مثال از عبارتی آورده شده است که از دو منبع داده خوانده میشود و اگر سرعت خودرو از ۱۰۰ کیلومتر در ساعت بیشتر شود و هشدار فشار باد لاستیک وجود نداشته باشد، مقدار true را ارزیابی میکند:
(vehicle_speed.speed_value * 3.6) > 100 && tire_pressure.warning == false
کنترل جریان اجرا با تریگرها
تریگرها (Triggers) هماهنگکنندههای پیکربندی معیارها هستند؛ آنها زمان پردازش دادهها و زمان تولید گزارشها را کنترل میکنند. هر تریگر باید یک نام منحصر به فرد داشته باشد.
سه نوع محرک وجود دارد:
- محرکهای داده: زمانی فعال میشوند که یک منبع داده با اتصال اشتراک، پیام جدیدی را منتشر کند (پس از نمونهبرداری فرعی، در صورت پیکربندی).
- محرکهای دورهای: در یک بازه زمانی ثابت شلیک میکنند.
- محرکهای شرطی: زمانی فعال میشوند که یک شرط منطقی مشخص برقرار شود.
محرکهای شرطی
تریگرهای شرطی به تریگرهای دیگر (تریگرهای دادهای، تناوبی یا سایر تریگرهای شرطی) گوش میدهند و هنگامی که یکی از آن تریگرها فعال میشود، یک عبارت را ارزیابی میکنند. تریگر شرطی فقط در صورتی فعال میشود که نتیجه عبارت با یک شرط خاص مطابقت داشته باشد.
شما میتوانید یک تریگر شرطی را برای فعال شدن بر اساس چندین نوع شرط پیکربندی کنید:
- مقدار: وقتی که عبارت به
true(یا غیر صفر) یاfalse(یا صفر) ارزیابی میشود. - لبه بالارونده: وقتی یک عبارت بولی از
falseبهtrueتغییر میکند، یا یک مقدار عددی افزایش مییابد. - لبه نزولی: وقتی یک عبارت بولی از
trueبهfalseتغییر میکند، یا یک مقدار عددی کاهش مییابد. - در حال تغییر: هر زمان که نتیجه عبارت با مقدار قبلی آن متفاوت باشد.
فیلتر کردن تغییرات حالت نویزدار
برای تریگرهای مبتنی بر لبه یا هنگام تغییر، میتوانید تغییرات مختصر یا نویزی حالت (اشکالات) را با الزام شرط به ماندن در حالت جدید برای حداقل مدت زمان قبل از فعال شدن تریگر، فیلتر کنید.
برای مثال، میتوانید یک تریگر را طوری تنظیم کنید که فقط در صورتی فعال شود که vehicle_speed > 100 true شود و حداقل به مدت 5 ثانیه true باقی بماند. این کار از فعال شدن تریگر به دلیل افزایش لحظهای سرعت خواندن جلوگیری میکند. همچنین میتوانید الزام کنید که تمام مقادیر مشاهده شده در طول این مدت زمان توقف دقیقاً برابر باشند.
گزارشهای معیارها را ایجاد کنید
پس از پردازش دادهها، شما نحوه و زمان بستهبندی آنها در گزارشها را تعریف میکنید.
گزارشها با استفاده از پیکربندیهای گزارش معیارها تعریف میشوند، که از سازندگان پیام برای تعریف ساختار و محتوای خروجی خود استفاده میکنند. هنگامی که یکی از محرکهای گزارش فعال میشود، سازنده پیام، تخصیص فیلدهای خود را برای ساخت بار داده گزارش ارزیابی میکند.
هر گزارش تولید شده نمونهای از یک پیام MetricsReport Protobuf است که خروجی سازنده پیام را در یک فیلد payload قرار میدهد و فراداده (metadata) را اضافه میکند. سرویس Telemetry به طور خودکار فرادادههای زیر را به هر MetricsReport اضافه میکند:
- یک شناسه منحصر به فرد جهانی (UUID) برای گزارش
- یک شماره گزارش ترتیبی، که برای هر گزارش تولید شده توسط این پیکربندی گزارش، افزایش مییابد.
- مهر زمانی که گزارش تولید شده است
- دلیل تولید (برای مثال، توسط یک قانون ایجاد شده یا هنگام خاموش شدن سیستم تولید شده است)
- UUID و نسخه پیکربندی معیارها که گزارش را تولید کرده است
- نام پیکربندی گزارش معیارها
کنترل تولید گزارش
اگرچه گزارشها معمولاً در پاسخ به محرکها تولید میشوند، میتوانید آنها را طوری پیکربندی کنید که در لحظات خاصی از چرخه حیات پیکربندی معیارها تولید شوند:
- گزارش فعالسازی: در صورت فعال بودن، سیستم بلافاصله پس از فعال شدن پیکربندی معیارها، یک گزارش اولیه تولید میکند.
- گزارش نهایی: در صورت فعال بودن، سیستم هنگام مکث یا توقف جمعآوری دادهها یا خاموش شدن سرویس تلهمتری، یک گزارش نهایی تولید میکند. این گزارش شامل دادههای جمعآوریشده تا آن لحظه است و به اطمینان از از دست نرفتن هیچ دادهای در پایان جلسه کمک میکند.
مدیریت چرخه حیات جمعآوری دادهها
به طور پیشفرض، پیکربندی معیارها به محض فعال شدن توسط یک کلاینت، شروع به جمعآوری و پردازش دادهها میکند و تا زمانی که توسط کلاینت غیرفعال شود، ادامه مییابد. با این حال، میتوانید با تعریف محرکهایی که جمعآوری دادهها یا پیکربندی معیارها را شروع یا متوقف میکنند، این چرخه حیات را به صورت جزئیتر کنترل کنید:
- تریگر شروع: در صورت تعریف، جمعآوری دادهها فقط زمانی شروع میشود که این تریگر فعال شود. اگر جمعآوری توسط تریگر توقف متوقف شده باشد، تریگر شروع آن را از سر میگیرد.
- تریگر توقف: در صورت تعریف، این تریگر جمعآوری دادهها را متوقف میکند. تجمیعها و تولید گزارش تا زمانی که تریگر شروع دوباره فعال شود، متوقف میشوند.
- غیرفعال کردن تریگر: این تریگر پیکربندی معیارها را به همان روشی که فراخوانی
deactivate_metrics_configاز کلاینت انجام میدهد، غیرفعال میکند.
برای مثال، میتوانید یک ماشه شرطی تعریف کنید که وقتی vehicle_state به DRIVING تغییر میکند، به عنوان ماشه شروع فعال شود، و دیگری که وقتی vehicle_state به PARKED تغییر میکند، به عنوان ماشه توقف فعال شود. این امر به اطمینان از جمعآوری دادهها فقط در حین حرکت وسیله نقلیه کمک میکند.