Rumah  >  Artikel  >  Java  >  log topeng dengan log balik logstash di java menggunakan regex

log topeng dengan log balik logstash di java menggunakan regex

Susan Sarandon
Susan Sarandonasal
2024-11-11 18:26:02257semak imbas

Dalam dunia dipacu data hari ini, keselamatan data adalah yang paling penting. Rangka kerja pengelogan memainkan peranan penting dalam pemantauan dan penyahpepijatan aplikasi, tetapi ia secara tidak sengaja boleh mendedahkan maklumat sensitif yang tidak sepatutnya. Log masking ialah teknik yang berkesan mengaburkan data sensitif dalam mesej log, melindungi maklumat sulit.

Memahami Log Balik

Log balik ialah rangka kerja pengelogan yang berkuasa dan kebanyakannya digunakan dalam aplikasi Java. Ia menawarkan pilihan konfigurasi yang fleksibel, termasuk keupayaan untuk memformat peristiwa log sebagai objek JSON. Ia adalah pengganti kepada rangka kerja Log4j, dengan cepat mendapat populariti kerana ciri dan kemudahan penggunaannya. Ia terdiri daripada Logger, Pengekod, Reka Letak, Penambah, Pengekod.

Logger: Logger ialah konteks untuk mesej log. Aplikasi akan berinteraksi dengan kelas ini untuk membuat mesej log.

Pengekod: Pengekod diperkenalkan dalam log balik 0.9.91 dan bertanggungjawab untuk mengubah acara menjadi tatasusunan bait serta menulis tatasusunan bait itu kepada Aliran Output. Pengekod yang diperkenalkan sebagai Reka Letak hanya mampu mengubah acara menjadi String yang mengehadkan skopnya kepada output bukan binari.

Reka letak: Reka letak bertanggungjawab untuk memformat permintaan pengelogan mengikut kehendak pengguna, manakala penambah menguruskan menghantar output yang diformatkan ke destinasinya.

Pelampir: Dalam sebutan log balik, destinasi output dipanggil pelengkap. Ini meletakkan mesej log di destinasi akhir mereka. Seorang Logger boleh mempunyai lebih daripada satu Appender. Pada masa ini, pelengkap wujud untuk konsol, fail, pelayan soket jauh, kepada MySQL, PostgreSQL, Oracle dan pangkalan data lain, JMS dan daemon UNIX Syslog jauh.

Mengenai Pengekod Log Balik Logstash

Pustaka logstash-logback-encoder ialah alat yang berharga untuk meningkatkan keupayaan pengelogan aplikasi Spring Boot anda. Ia menyediakan cara mudah untuk memformat mesej log dalam format JSON berstruktur, menjadikannya mudah digunakan oleh pengagregatan log dan alatan analisis seperti Logstash. Format JSON menyediakan cara berstruktur dan boleh dibaca mesin untuk mengelog maklumat, menjadikannya sesuai untuk analisis log lanjutan dan langkah keselamatan. Faedah logstash

  • Logstash Penyesuaian JSON membolehkan anda menyesuaikan output JSON untuk memasukkan medan dan metadata tertentu.

  • Bidang Dinamik Ia juga membenarkan menambah medan secara dinamik untuk mengelog peristiwa berdasarkan konteks aplikasi.

  • Format JSON Kebolehbacaan yang Dipertingkat menawarkan struktur yang jelas dan boleh dibaca oleh manusia untuk acara log.

  • Alat pengagregatan Log Carian dan Analisis yang Dipertingkat boleh menghuraikan dan menanya log JSON dengan mudah.

  • Log JSON Penghuraian Mesin sesuai untuk analisis automatik dan sistem amaran.

Penyelesaian untuk menutup data dalam log

Matlamat utama di sini adalah untuk menyediakan penyelesaian untuk menutup data yang boleh disesuaikan dan dikonfigurasikan semasa masa jalan.

Berikut ialah keperluan mudah kami untuk

  1. tutup kata laluan sepenuhnya dalam log.
  2. topeng nombor telefon dan nama log masuk kecuali 5 terakhir dalam log.

Langkah 1
Buat aplikasi but spring. Penyelesaian ini akan berfungsi dengan mana-mana aplikasi berasaskan java dengan sedikit penyesuaian.

Langkah 2
Konfigurasikan semua ungkapan biasa untuk menutup data. Sila ingat regex mahal dari segi penggunaan sumber. Pastikan anda menala regex anda. Kumpulan regex akan membolehkan kami memilih subrentetan yang diperlukan daripada rentetan.

mask logs with logstash logback in java using regex

Langkah 3
Buat kelas dan laksanakan MessageJsonProvider. Antara muka ini adalah daripada logstash dan membolehkan kami menyesuaikan mesej sebelum mencetak ke lampiran. kaedah writeTo dalam antara muka ini akan dipanggil untuk setiap mesej log.

  • kaedah start() baca semua regex dan sediakan LogMasker yang mengandungi semua MaskingRule. Kaedah ini adalah daripada AbstractJsonProvider dan hanya menandakan proses dimulakan sebagai benar.

  • MaskingRule akan memegang corak regex dan fungsi. Fungsi ini menggantikan rentetan yang dikenal pasti dari dalam log.

@Data
public class MaskingMessagingProvider extends MessageJsonProvider {

    public static final String DEFAULT_RULES_DELIMITER = ",";
    private LogMasker logMasker;
    private String rules;

    public MaskingMessagingProvider() {
        super();
    }

    @Override
    public void start() {
        super.start();
        this.logMasker = LogMasker.create(StringUtils.tokenizeToStringArray(rules, DEFAULT_RULES_DELIMITER));
    }

    @Override
    public void writeTo(JsonGenerator generator, ILoggingEvent event) throws IOException {

        if (isStarted()) {
            JsonWritingUtils.writeStringField(generator, getFieldName(), logMasker.mask(event.getFormattedMessage()));
        }
    }
}

class LogMasker {

    private MaskingRule[] masks;

    public LogMasker(MaskingRule[] masks) {
        super();
        this.masks = masks.clone();
    }

    public static LogMasker create(String[] rules) {

        return new LogMasker(Arrays.stream(rules).map(rule -> MaskingRule.create(rule)).toArray(MaskingRule[]::new));
    }

    public String mask(String input) {
        String transformed = input;
        for (MaskingRule m : masks) {
            transformed = m.mask(transformed);
        }
        return transformed;
    }
}

class MaskingRule {
    public static final int REG_EX_DEFAULT_GROUP_SELECTOR = 2;
    public static final String DEFAULT_REPLACEMENT = "*";

    private Pattern pattern;
    private UnaryOperator<String> replacement;

    public MaskingRule(Pattern maskPattern, UnaryOperator<String> replacement) {
        super();
        this.pattern = maskPattern;
        this.replacement = replacement;
    }

    public static MaskingRule create(String rule) {
        return new MaskingRule(Pattern.compile(rule), (in) -> MaskingRule.maskDataWithReplacement(in, DEFAULT_REPLACEMENT));
    }

    public String mask(String transformed) {
        Matcher matcher = pattern.matcher(transformed);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, replacement.apply(getDataToBeMasked(matcher)));
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    private static String maskDataWithReplacement(String input, String replacement) {
        int repetition = !StringUtils.hasLength(input) ? 0 : input.length();
        return String.join("", Collections.nCopies(repetition, replacement));
    }

    private static String getDataToBeMasked(Matcher matcher) {
        if (matcher.groupCount() > 1) {
            return matcher.group(REG_EX_DEFAULT_GROUP_SELECTOR);
        }
        return matcher.groupCount() > 0 ? matcher.group(1) : "";
    }
}

Langkah 4
Konfigurasikan kelas dalam fail logback-spring.xml.

<configuration>
    <springProperty scope="context" name="rules" source="app.logging.masking.rules"
                    defaultValue=""/>
    <appender name="CONSOLE">



<p><strong>Steps 5</strong><br>
Run the application. For simplicity, i have taken a string which is holding data and printing it at application start up.<br>
</p>

<pre class="brush:php;toolbar:false">@SpringBootApplication
@Slf4j
public class LogDataMaskingApplication {

    public static void main(String[] args) {
        SpringApplication.run(LogDataMaskingApplication.class, args);
        LogDataMaskingApplication.maskingTest();
    }

    public static void maskingTest() {
        String data = "{\"loginName\":\"maskingtest\",\"phoneNumber\":\"9898981212\",\"password\":\"Masking@123\"}";
        log.info(data);
    }

}

mask logs with logstash logback in java using regex

Ini adalah penyelesaian yang sangat asas dan mempunyai banyak skop untuk peningkatan mengikut keperluan seperti ringkasan mesej dan lain-lain...

Anda boleh mencari kod di GitHub.

Sila tinggalkan ulasan jika anda mempunyai sebarang soalan.

Atas ialah kandungan terperinci log topeng dengan log balik logstash di java menggunakan regex. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn