J'envisageais de collecter et d'analyser les logs de l'application Web et de visualiser les résultats, et je réfléchissais au type de configuration que ce serait si je voulais le faire moi-même. C'est une histoire du processus d'examen à ce moment-là et du service réellement utilisé dans l'environnement AWS adopté.
Au début, il fut un temps où je me demandais si la recherche élastique → Kibana suffirait ... Certes, il est possible de rechercher et d'agréger les journaux avec Elasticsearch et de les visualiser avec Kibana. Cependant, il est difficile de voir les résultats agrégés sur un autre axe, et si vous utilisez Kibana, d'autres personnes peuvent voir le journal brut, il y a donc divers problèmes, donc le plan Kibana a disparu. C'était.
L'agrégation ne semble pas être un problème avec la recherche élastique, alors puis-je obtenir les données nécessaires de RDB lorsque je place le résultat agrégé dans RDB et que je le visualise? J'ai pensé.
Mais ... J'ai décidé d'utiliser la base de données chronologique parce que même si je mettais les résultats agrégés dans la RDB, je n'ai pas obtenu d'aussi bons résultats en termes de performances lorsque je les ai retirés pour analyse.
Je me suis installé sur une telle configuration système.
Cependant, à la suite de diverses réflexions, dès la conclusion, il semble que cela coûtera de l'argent en termes d'infrastructure, alors j'ai décidé d'envisager un autre plan ...
Par conséquent, il a été proposé d'intégrer l'environnement AWS.
Ce que je veux faire, c'est "Je veux agréger et analyser les logs et les visualiser !!" sortie par l'application.
Si vous vérifiez le service AWS pour le moment, il semble que le flux suivant peut être effectué
Le flux est simple comme ça.
Pour faire fonctionner Athena à partir de Java, utilisez le JDBC pour Athena fourni par AWS. Actuellement (en novembre 2018), le dernier est AthenaJDBC42-2.0.5.jar, mais [Télécharger ici](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc. html) Vous pouvez.
Code Java pour appeler Athena pour s'enregistrer auprès de Lambda dans Flow 2.
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class AthenaService {
//Paramètres Athena Ohio
private static final String CONNECTION_URL = "jdbc:awsathena://athena.us-east-2.amazonaws.com:443";
private static final String S3_BUCKET = "test-bucket";
public void execute(String dateTime) {
Properties info = new Properties();
info.put("UID", "XXXXXXXX");
info.put("PWD", "XXXXXXXX");
info.put("S3OutputLocation",
+ "s3://" + S3_BUCKET + File.separator
+ "test-dir" + File.separator);
Class.forName("com.simba.athena.jdbc.Driver");
Connection connection = DriverManager.getConnection(CONNECTION_URL, info);
Statement statement = connection.createStatement();
String query = "SELECT xxxxxxxxxxxxxxxxxxxx";
ResultSet result = statement.executeQuery(query);
while(result.next()) {
System.out.println(rs.getString("Nom de la clé"));
}
result.close();
statement.close();
connection.close();
}
Vous pouvez facilement vous connecter en définissant simplement les informations requises dans Propriétés de cette manière.
En prime, je n'ai pas besoin du fichier avec l'extension .metadata qui a été créé lorsque j'ai exécuté Athena, donc je vais le supprimer. Cliquez ici pour l'échantillon
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import open.ag.kabigon.athena.Constant;
import open.ag.kabigon.s3.service.S3Base;
public class S3Handler {
private static final String S3_BUCKET = "test-bucket";
private AmazonS3 s3;
public void deleteAtenaMetadate(String dateTime) {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(
"UID", "PWD");
s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(Regions.US_EAST_2)
.build();
//Obtenez l'objet qui existe dans le répertoire du compartiment spécifié
ObjectListing objectList = s3.listObjects(Constant.S3_AG_BACKET, "test-dir" + File.separator);
deleteObject(objectList);
s3.shutdown();
}
private void deleteObject(ObjectListing objectList) {
objectList.getObjectSummaries().forEach(i -> {
//L'extension est.metadata or .Supprimer l'objet txt
if (i.getKey().endsWith(".metadata") || i.getKey().endsWith(".txt"))
this.s3.deleteObject(Constant.S3_AG_BACKET, i.getKey());
});
if (objectList.isTruncated()) {
ObjectListing remainsObject = this.s3.listNextBatchOfObjects(objectList);
this.deleteObject(remainsObject);
}
}
}
Recommended Posts