เคล็ดลับ
Datadog รองรับโครงการโอเพนซอร์ส เรียนรู้เพิ่มเติมเกี่ยวกับ Datadog สำหรับโครงการโอเพนซอร์ส
Datadog-static-Analyzer เป็นเครื่องมือวิเคราะห์แบบสแตติกสำหรับการวิเคราะห์ Datadog Static
datadog-static-analyzer --directory /path/to/directory --output report.csv --format csvdocker run -it --rm -v /path/to/directory:/data ghcr.io/datadog/datadog-static-analyzer:latest --directory /data --output /data/report.csv --format csvสำหรับข้อมูลเพิ่มเติมเกี่ยวกับคอนเทนเนอร์ Docker โปรดดูเอกสารประกอบที่นี่
หากคุณพบปัญหาอ่านคำถามที่พบบ่อยก่อนอาจมีวิธีแก้ปัญหาของคุณ
คุณสามารถเลือกกฎเพื่อใช้ในการสแกนที่เก็บของคุณโดยการสร้างไฟล์ static-analysis.datadog.yml
ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณทำตามเอกสารและสร้างไฟล์ static-analysis.datadog.yml ที่ที่รูทของโครงการของคุณด้วย Rulesets ที่คุณต้องการใช้
กฎทั้งหมดสามารถพบได้ในเอกสาร Datadog static-analysis.datadog.yml ของคุณ. datadog.yml อาจมีเฉพาะกฎชุดที่มีอยู่จากเอกสาร Datadog
ตัวอย่างของไฟล์ yaml
schema-version : v1
rulesets :
- python-code-style
- python-best-practices
- python-inclusive
ignore :
- testsคุณสามารถใช้ในท่อส่ง CI/CD ของคุณโดยใช้การรวมของเรา:
หากคุณใช้ในท่อส่ง CI/CD ของคุณเองคุณสามารถรวมเครื่องมือโดยตรง: ดูเอกสาร Datadog สำหรับข้อมูลเพิ่มเติม
ส่วนขยาย Datadog Intellij ช่วยให้คุณใช้เครื่องวิเคราะห์แบบคงที่โดยตรงจากผลิตภัณฑ์ Jetbrains ทั้งหมด สร้างไฟล์ static-analysis.datadog.yml ดาวน์โหลดส่วนขยายและคุณสามารถเริ่มใช้งานได้ คุณสามารถดูตัวอย่างด้านล่างของข้อเสนอแนะเพื่อเพิ่มการหมดเวลาเมื่อดึงข้อมูลด้วย Python ด้วยโมดูลคำขอ

ส่วนขยายรหัส Datadog vs ช่วยให้คุณใช้เครื่องวิเคราะห์แบบคงที่โดยตรงจากรหัส VS สร้างไฟล์ static-analysis.datadog.yml ดาวน์โหลดส่วนขยายและคุณสามารถเริ่มใช้งานได้

เมื่อคุณออนบอร์ดบนผลิตภัณฑ์ datadog คุณสามารถเลือกชุดกฎที่คุณต้องการ/ต้องการ หากคุณไม่ได้ใช้ datadog โดยตรงมีรายการของกฎที่ใช้ทั่วไปที่มีอยู่ในผลิตภัณฑ์การวิเคราะห์แบบคงที่ Datadog ต่อภาษา
รายการที่สมบูรณ์มีอยู่ในเอกสารของเรา
รายการกฎระเบียบมีอยู่ใน Rulesets.md
ดาวน์โหลดรุ่นล่าสุดสำหรับระบบและสถาปัตยกรรมของคุณจากหน้ารุ่น
เพื่อให้ได้เครื่องวิเคราะห์แบบคงที่ผ่านเชลล์:
curl -L -O https://www.github.com/DataDog/datadog-static-analyzer/releases/latest/download/datadog-static-analyzer- < target > .zipตัวอย่างเพื่อรับไบนารี x86_64 สำหรับ Linux:
curl -L -O https://www.github.com/DataDog/datadog-static-analyzer/releases/latest/download/datadog-static-analyzer-x86_64-unknown-linux-gnu.zipdatadog-static-analyzer -i < directory > -o < output-file > สำหรับเครื่องมือในการทำงานคุณจะต้องมีไฟล์ <directory>/static-analysis.datadog.yml ที่กำหนดการกำหนดค่าของเครื่องวิเคราะห์ ไฟล์นี้จะระบุกฎที่คุณจะใช้สำหรับโครงการของคุณ
คุณสามารถรับข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าในเอกสาร Datadog
ไบนารีไม่สามารถดำเนินการได้ตามที่เป็นอยู่ คุณต้องตั้งค่าสถานะไบนารีเพื่อดำเนินการโดยใช้คำสั่งต่อไปนี้
xattr -dr com.apple.quarantine datadog-static-analyzer-f หรือ --format : รูปแบบของไฟล์เอาต์พุต -f sarif ผลิตไฟล์ที่สอดคล้องกับ sarif-r หรือ --rules : จัดเตรียมไฟล์ที่มีกฎทั้งหมด (กฎสามารถใส่ในไฟล์โดยใช้ datadog-export-rulesets )-c หรือ --cpus : จำนวนแกนที่ใช้ในการวิเคราะห์ (นับประมาณ 1GB ของการใช้ RAM ต่อแกน)-o หรือ --output : ไฟล์เอาต์พุต-p หรือ --ignore-path : เส้นทาง (รูปแบบ/ลูกโลก) เพื่อเพิกเฉย; ยอมรับหลาย ๆ-x หรือ --performance-statistics : แสดงสถิติประสิทธิภาพสำหรับเครื่องวิเคราะห์-g หรือ --add-git-info : เพิ่มข้อมูลที่เกี่ยวข้องกับ GIT (SHA ฯลฯ ) ลงในรายงาน SARIF เมื่อใช้ -F Sarif--fail-on-any-violation : ทำให้โปรแกรมออกจากรหัสทางออกที่ไม่เป็นศูนย์หากมีการละเมิดอย่างน้อยหนึ่งครั้งของความรุนแรงที่กำหนด-w หรือ --diff-aware : เปิดใช้งานการสแกน Diff-Aware (ดูบันทึกเฉพาะด้านล่าง) ตั้งค่าตัวแปรต่อไปนี้เพื่อกำหนดค่าการวิเคราะห์:
DD_SITE : พารามิเตอร์ไซต์ datadog ที่ใช้เพื่อดึงกฎ (รายการมุมมอง) (ค่าเริ่มต้น: datadoghq.com ) เครื่องวิเคราะห์แบบคงที่สามารถกำหนดค่าได้โดยใช้ไฟล์ static-analysis.datadog.yml ที่ไดเรกทอรีรากของที่เก็บ นี่คือไฟล์ yaml ที่มีรายการต่อไปนี้:
rulesets : (จำเป็น) รายการที่มีกฎทั้งหมดที่ใช้สำหรับที่เก็บนี้ (ดูเอกสาร Datadog สำหรับรายการทั้งหมด) องค์ประกอบของรายการนี้จะต้องเป็นสตริงหรือแผนที่ที่มีการกำหนดค่าสำหรับชุดกฎ (อธิบายไว้ด้านล่าง)ignore : (ไม่บังคับ) รายการคำนำหน้าเส้นทางและรูปแบบ GLOB ที่จะละเว้น ไฟล์ที่ตรงกับรายการใด ๆ จะไม่ถูกวิเคราะห์only : (ไม่บังคับ) รายการคำนำหน้าเส้นทางและรูปแบบ GLOB เพื่อวิเคราะห์ หากมีการระบุ only ไฟล์ที่ตรงกับรายการใดรายการหนึ่งจะถูกวิเคราะห์ignore-gitignore : (ไม่บังคับ) โดยค่าเริ่มต้นรายการใด ๆ ที่พบในไฟล์ .gitignore จะถูกเพิ่มลงในรายการ ignore หากตัวเลือก ignore-gitignore เป็นจริงไฟล์ .gitignore จะไม่อ่านmax-file-size-kb : (ไม่บังคับ) ขนาดใหญ่กว่าขนาดนี้ในกิโลไบต์จะถูกละเว้น ค่าเริ่มต้นคือ 200 kbschema-version : (ไม่บังคับ) เวอร์ชันของสคีมาที่ไฟล์กำหนดค่านี้ตามมา หากระบุจะต้องเป็น v1 รายการของรายการ rulesets ต้องเป็นสตริงที่มีชื่อของชุดกฎที่จะเปิดใช้งานหรือแผนที่ที่มีการกำหนดค่าสำหรับชุดกฎ แผนที่นี้มีฟิลด์ต่อไปนี้:
ignore : (ไม่บังคับ) รายการคำนำหน้าเส้นทางและรูปแบบ GLOB เพื่อละเว้น สำหรับชุดกฎนี้ กฎในชุดกฎนี้จะไม่ได้รับการประเมินสำหรับไฟล์ใด ๆ ที่ตรงกับรายการใด ๆ ในรายการ ignoreonly : (ไม่บังคับ) รายการคำนำหน้าเส้นทางและรูปแบบ GLOB เพื่อวิเคราะห์ ชุดกฎนี้ หากมีการระบุ only กฎในชุดกฎนี้จะได้รับการประเมินเฉพาะไฟล์ที่ตรงกับรายการใดรายการหนึ่งrules : (ไม่บังคับ) แผนที่ของการกำหนดค่ากฎ กฎที่ไม่ได้ระบุในแผนที่นี้จะยังคงได้รับการประเมิน แต่ด้วยการกำหนดค่าเริ่มต้น แผนที่ในฟิลด์ rules ใช้ชื่อของกฎเป็นคีย์และค่าเป็นแผนที่ด้วยฟิลด์ต่อไปนี้:
ignore (ไม่บังคับ) รายการคำนำหน้าเส้นทางและรูปแบบ GLOB เพื่อละเว้น กฎนี้ กฎนี้จะไม่ได้รับการประเมินสำหรับไฟล์ใด ๆ ที่ตรงกับรายการใด ๆ ในรายการ ignoreonly : (ไม่บังคับ) รายการคำนำหน้าเส้นทางและรูปแบบ GLOB เพื่อวิเคราะห์ กฎนี้ หากมีการระบุ only กฎนี้จะได้รับการประเมินเฉพาะไฟล์ที่ตรงกับรายการใดรายการหนึ่งseverity : (เป็นทางเลือก) หากมีให้แทนที่ความรุนแรงของการละเมิดที่เกิดจากกฎนี้ ความรุนแรงที่ถูกต้องคือ ERROR WARNING NOTICE และ NONEcategory : (ไม่บังคับ) หากมีให้แทนที่หมวดหมู่ของกฎนี้ หมวดหมู่ที่ถูกต้องคือ BEST_PRACTICES , CODE_STYLE , ERROR_PRONE , PERFORMANCE และ SECURITYarguments : (ไม่บังคับ) แผนที่ของค่าสำหรับอาร์กิวเมนต์ของกฎ แผนที่ในฟิลด์ arguments ใช้ชื่ออาร์กิวเมนต์เป็นคีย์และค่าเป็นสตริงหรือแผนที่:
ตัวอย่างคำอธิบายประกอบของไฟล์กำหนดค่า:
# This is a "v1" configuration file.
schema-version : v1
# The list of rulesets to enable for this repository.
rulesets :
# Enable the `python-inclusive` ruleset with the default configuration.
- python-inclusive
# Enable the `python-best-practices` ruleset with a custom configuration.
- python-best-practices :
# Do not apply any of the rules in this ruleset to files that match `src/**/*.generated.py`.
ignore :
- src/**/*.generated.py
rules :
# Special configuration for the `python-best-practices/no-generic-exception` rule.
no-generic-exception :
# Treat violations of this rule as errors (normally "notice").
severity : ERROR
# Classify violations of this rule under the "code style" category.
category : CODE_STYLE
# Only apply this rule to files under the `src/new-code` subtree.
only :
- src/new-code
# Enable the `python-code-style ruleset` with a custom configuration.
- python-code-style :
rules :
max-function-lines :
# Set arguments for the `python-code-style/max-function-lines` rule.
arguments :
# Set the `max-lines` argument to 150 in the whole repository.
max-lines : 150
max-class-lines :
# Set arguments for the `python-code-style/max-class-lines` rule.
arguments :
# Set different values for the `max-lines` argument in different subtrees.
max-lines :
# Set the `max-lines` argument to 100 by default
/ : 100
# Set the `max-lines` argument to 75 under the `src/new-code` subtree.
src/new-code : 75
# Analyze only files in the `src` and `imported` subtrees.
only :
- src
- imported
# Do not analyze any files in the `src/tests` subtree.
ignore :
- src/tests
# Do not add the content of the `.gitignore` file to the `ignore` list.
ignore-gitignore : true
# Do not analyze files larger than 100 kB.
max-file-size-kb : 100อีกตัวอย่างหนึ่งที่แสดงทุกตัวเลือกที่ใช้:
schema-version : v1
rulesets :
- python-best-practices
- python-code-style :
ignore :
- src/generated
- src/**/*_test.py
only :
- src
- imported/**/new/**
rules :
max-function-lines :
severity : WARNING
category : PERFORMANCE
ignore :
- src/new-code
- src/new/*.gen.py
only :
- src/new
- src/**/new-code/**
arguments :
max-lines : 150
min-lines :
/ : 10
src/new-code : 0
ignore :
- dist
- lib/**/*.py
only :
- src
- imported/**/*.py
ignore-gitignore : true
max-file-size-kb : 256 มีคำจำกัดความสคีมา JSON สำหรับ static-analysis.datadog.yml ในไดเรกทอรี schema
คุณสามารถใช้เพื่อตรวจสอบไวยากรณ์ของไฟล์การกำหนดค่าของคุณ:
npm install -g pajv )pajv validate -s schema/schema.json -d path/to/your/static-analysis.datadog.yml มีตัวอย่างบางส่วนของไฟล์การกำหนดค่าที่ถูกต้องและไม่ถูกต้องใน schema/examples/valid และ schema/examples/invalid ตามลำดับ หากคุณทำการเปลี่ยนแปลงสคีมา JSON คุณสามารถทดสอบพวกเขากับตัวอย่างของเรา:
npm install -g pajv )make -C schema การสแกน Diff-Aware เป็นคุณลักษณะของการวิเคราะห์แบบคงที่เพื่อสแกนไฟล์ที่มีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้เท่านั้น การสแกนที่รับรู้อย่างตระหนักถึงการใช้ผลลัพธ์ก่อนหน้านี้และเพิ่มการละเมิดจากไฟล์ที่เปลี่ยนแปลงเท่านั้น
ในการใช้การสแกนที่รู้ตัวดีคุณต้องเป็นลูกค้า Datadog
เพื่อใช้การสแกนที่รู้ตัวดี:
DD_SITE ตาม DataDog DataCenter ที่คุณใช้ (https://docs.datadoghq.com/getting_started/site/)DD_APP_KEY และ DD_API_KEY ด้วยแอปพลิเคชัน datadog ของคุณและปุ่ม API ของคุณ--diff-awareเมื่อใช้ Diff-Aware เครื่องวิเคราะห์แบบคงที่จะเชื่อมต่อกับ Datadog และลองใช้การวิเคราะห์ก่อนหน้านี้เพื่อใช้ หากปัญหาใด ๆ เกิดขึ้นและไม่สามารถใช้ Diff-Aware เครื่องวิเคราะห์จะส่งออกข้อผิดพลาดเช่นเดียวกับที่ด้านล่างและดำเนินการสแกนเต็มรูปแบบ
คุณสามารถใช้ตัวเลือก --debug true เพื่อแก้ไขปัญหาเพิ่มเติมหากจำเป็น
$ datadog-static-analyzer --directory /path/to/code --output output.sarif --format sarif --diff-aware
...
diff aware not enabled (error when receiving diff-aware data from Datadog with config hash 16163d87d4a1922ab89ec891159446d1ce0fb47f9c1469448bb331b72d19f55c, sha 5509900dc490cedbe2bb64afaf43478e24ad144b), proceeding with full scan.
...ชุดกฎการส่งออกจาก API เป็นไฟล์
cargo run --bin datadog-export-rulesets -- -r < ruleset > -o < file-to-export > ดูไฟล์ที่มีส่วนร่วม MD สำหรับข้อมูลเพิ่มเติมรวมถึงการพัฒนา MD สำหรับรายละเอียดทั้งหมดเกี่ยวกับแนวทางการทดสอบและการเข้ารหัส