File size: 5,237 Bytes
2223769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Tutoriel : Créer une application web pour analyser des journaux système avec l'API NVIDIA

## Prérequis
Avant de commencer, assurez-vous que :

1. **Python** est installé sur votre système.
2. Vous avez installé les bibliothèques suivantes :
    - `streamlit`
    - `openai`
    - `json` (intégré dans Python, aucune installation nécessaire)
3. Vous disposez d'une clé API NVIDIA valide.

Installez les bibliothèques nécessaires avec :
```bash
pip install streamlit openai
```

---

## Objectif
Nous allons créer une application Streamlit qui :

1. Permet de télécharger un fichier de journaux système (format texte).
2. Analyse ce fichier à l'aide de l'API NVIDIA.
3. Interprète les journaux pour identifier des événements suspects ou critiques.

---

## Code de l'application
Créez un fichier Python nommé `app.py` et collez le code suivant :

```python
import streamlit as st
import requests
import json  # Assurez-vous que json est importé

# Configurer le client NVIDIA
API_KEY = "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"
BASE_URL = "https://integrate.api.nvidia.com/v1"

def analyze_logs(content):
    headers = {"Authorization": f"Bearer {API_KEY}"}
    prompt = f"""
    Voici une liste de journaux système :
    {content}

    1. Identifiez les événements suspects ou inhabituels.
    2. Expliquez pourquoi ces événements sont problématiques.
    3. Proposez des recommandations pour éviter ces problèmes à l'avenir.
    """
    payload = {
        "model": "nvidia/llama-3.1-nemotron-70b-instruct",
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.5,
        "top_p": 1,
        "max_tokens": 1024,
        "stream": True,
    }
    response = requests.post(f"{BASE_URL}/chat/completions", headers=headers, json=payload, stream=True)
    if response.status_code == 200:
        return response
    else:
        st.error(f"Erreur API NVIDIA : {response.status_code} - {response.text}")
        return None

# Application Streamlit
st.title("Analyse des journaux système avec NVIDIA LLM")
st.write("Cette application analyse les journaux système pour identifier des événements critiques ou suspects.")

# Upload du fichier
uploaded_file = st.file_uploader("Téléchargez un fichier de journaux système (format texte)", type=["txt"])

if uploaded_file is not None:
    try:
        # Lire le contenu du fichier
        content = uploaded_file.read().decode("utf-8")
        st.write("Fichier chargé avec succès :")
        st.text(content[:500])  # Afficher les 500 premiers caractères

        # Appel à l'API NVIDIA
        response = analyze_logs(content)
        if response:
            st.success("Résultat de l'analyse :")
            result = ""
            for line in response.iter_lines():
                if line:
                    try:
                        chunk = line.decode("utf-8")
                        data = json.loads(chunk.replace("data: ", ""))
                        if "choices" in data and data["choices"][0]["delta"].get("content"):
                            result += data["choices"][0]["delta"]["content"]
                    except json.JSONDecodeError:
                        st.error("Erreur lors du décodage JSON : chunk mal formé.")
                    except Exception as e:
                        st.error(f"Erreur dans le traitement du chunk : {e}")
            # Afficher le rapport d'analyse avec un formatage clair
            st.markdown("### Rapport d'analyse")
            for line in result.split("\n"):
                if line.strip():
                    st.write(f"- {line.strip()}")

    except Exception as e:
        st.error(f"Erreur lors du traitement du fichier : {e}")
```

---

## Instructions pour l'exécution
1. Sauvegardez le fichier sous le nom `app.py`.
2. Exécutez l'application Streamlit avec la commande suivante :
   ```bash
   streamlit run app.py
   ```
3. Ouvrez l'URL générée par Streamlit (généralement `http://localhost:8501`).
4. Téléchargez un fichier contenant les journaux système pour les analyser.

---

## Exemple de fichier de journaux système
Créez un fichier nommé `journaux_systeme.txt` avec le contenu suivant pour tester l'application :

```
2025-01-10 12:00:01 User 'admin' logged in from IP 192.168.1.10
2025-01-10 12:15:23 Failed login attempt for user 'root' from IP 10.0.0.15
2025-01-10 12:20:45 User 'john' downloaded sensitive file 'confidential.pdf'
2025-01-10 12:35:50 Unusual traffic detected from IP 10.0.0.20
2025-01-10 12:50:10 User 'admin' performed a password reset for user 'guest'
```

---

## Points importants
- Remplacez la clé API dans le code par une clé valide et personnelle.
- Cette application est un point de départ. Vous pouvez l'enrichir pour fournir des visualisations ou des recommandations plus avancées.

---

## Exemple d'exécution
Voici à quoi ressemble l'application lors de son utilisation :

![Exemple d'exécution](img1.png)

---
## Conclusion
Félicitations ! Vous avez créé une application Streamlit pour analyser des journaux système à l'aide de l'API NVIDIA. Continuez à l’améliorer en explorant d'autres modèles ou en ajoutant des fonctionnalités.