Recent Posts

Sosyal Medya – Sosyal Deney | Eğlence

Sosyal Medya – Sosyal Deney | Eğlence

Merhaba, WhatsApp, Facebook, Instagram gibi platformlarda, ilk bakışta insanı etkileyen sözler sıkça paylaşılıyor. Genelde bu sözlerin sahibi olarak eski alimlerden İbn-i Sina, akademik camiadan Prof. Dr. İlber Ortaylı veya tıp camiasından Prof. Dr. Osman Müftüoğlu gösteriliyor. Kimse de bu sözleri gerçekten bu kişiler mi söylemiş, 

Google Sheets Belge Güncelleme | C#

Google Sheets Belge Güncelleme | C#

Merhaba, Google Looker Studio diye bir raporlama aracı varmış.
Veri görselleştirme işlerine yarıyor.
Buna kaynak olarak bir çok alternatif sunabiliyorsunuz.
Ama bana en uygunu bir Google Sheets gibi geldi.
Ama bu Google Sheets dosyasını otomatik olarak da doldurabilmem lazımdı.
İşte bu noktada bunu API ile nasıl yaparım diyerek çıktım yola ve faydalı yönlendirmeler sayesinde basitçe hallettim.

  • Google Cloud Console’a giderek bir proje oluşturdum.
  • Sol üst köşedeki hamburger menüden IAM ve Yönetici > Hizmet Hesapları kısmını seçtim.
  • Şöyle bir isim verdim hesap adı olarak: google-sheets-api-service-account
  • Sonra oluşan hesabın e-posta adresine tıkladım.
  • Anahtarlar sekmesine gidip, “Anahtar Ekle” > “Yeni Anahtar Oluştur” seçeneğini seçtim.
  • JSON olarak indirdim dosyayı. Adını service-account.json yaptım.
  • Bir tane Google Sheets dosyası oluşturdum: https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz12345678901234/edit
    /d/ ile /edit arasında kalan uzun karakter dizisi senin spreadsheetId imiş.
  • Bunu az önceki servis kullanıcı ile paylaştım. SHARE seçeneğini seçip o e-posta adresini ekledim.

Bir .net konsol projesi oluşturdum.
.NET projesine Google.Apis.Sheets.v4 NuGet paketini ekledim.
Sonra şu kodu yazdım.
Çat diye çalıştı arkadaş.

using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;

Console.WriteLine("Hello, World!");

GoogleCredential credential;
using (FileStream stream = new FileStream("service-account.json", FileMode.Open, FileAccess.Read))
{
	credential = GoogleCredential.FromStream(stream).CreateScoped(SheetsService.Scope.Spreadsheets);
}

SheetsService service = new SheetsService(new BaseClientService.Initializer()
{
	HttpClientInitializer = credential,
	ApplicationName = "ConsoleGoogleSheetsUpdate",
});

String spreadsheetId = "1AbCdEfGhIjKlMnOpQrStUvWxYz12345678901234";
String range = "Sheet1!A2";
ValueRange valueRange = new ValueRange();
valueRange.Values = new List<IList<object>> { new List<object> { "Hello, World!" } };

SpreadsheetsResource.ValuesResource.UpdateRequest request = service.Spreadsheets.Values.Update(valueRange, spreadsheetId, range);
request.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW;

UpdateValuesResponse response = request.Execute();
Console.WriteLine("Veri başarıyla eklendi.");

Selamlar.

PHP Tools For VS Code | PHP

PHP Tools For VS Code | PHP

Merhaba, yeni bir projede PHP kullanmaya başladım. Aynı zamanda da VS Code.Diğer kullandığım araçlarda breakpoint koyma, debug etme gbi kolaylıklar vardı.Bunda yok mu diye araştırırken baktım ki adamlar yapmış. “PHP Debug Adapter for Visual Studio Code” diye bir eklenti var. Selamlar.

Logstash İle Loglama (UDP ve TCP) | PHP

Logstash İle Loglama (UDP ve TCP) | PHP

Merhaba, bir önceki yazımızda kurduğumuz ELK Stack yapısını PHP’de iki farklı şekilde kullandık.Birinciside TCP protokolü ile diğerinde UDP.Bu tür loglama işlerinde UDP protokolü daha çok tercih ediliyormuş, onu öğrendim.Veri kaybı sizin için müthiş kritik değilse, performans olarak bunun tercih edilmesi tavsiye ediliyor. Bizim senaryomuzda middleware 

ELKSTACK Kurulumu | Genel

ELKSTACK Kurulumu | Genel

Merhaba, elimizde sıfır bir Ubuntu Linux var.
Önce JDK’yı kuracağız.

  1. Paket yöneticisi güncellemek için;
    • sudo apt update
  2. JDK’yı yüklemek için;
    • sudo apt install openjdk-11-jdk
  3. Java kurulmuş mu teyit etmek için;
    • java -version
  4. Elasticsearch deposu ekleme ve elasticsearch kurulumu için;
    • curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
      echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
      sudo apt update
      sudo apt install elasticsearch
  5. Elasticsearch ayakta mı kontrol etmek için;
    • sudo systemctl status elasticsearch
  6. Aktif değildi. Onu başlatmak ve açılışta çalışmasını sağlamak için;
    • sudo systemctl start elasticsearch
      sudo systemctl enable elasticsearch
  7. Elasticsearch’e erişilebiliyor mu kontrol etmek için;
    • curl -X GET "localhost:9200"
    • Elasticsearch’e dışarıdan erişime izin vermek için;
      sudo nano /etc/elasticsearch/elasticsearch.yml
    • Aşağıdaki satırlar yorumdu, açtık.
      network.host: 0.0.0.0
      http.port: 9200

      Sonra CTRL + O ile çıktık. Dosya adını aynı bıraktık ve kaydettik.
  8. Ama hata verdi. Hatanın detaylarını araştırınca şunu bulduk: Elasticsearch canlı ortama çıkıyorsan ayarlarını kontrol ediyor.
    network.host: 0.0.0.0 demek ben canlıya çıkıyorum demekmiş.
    Hatadaki problemi gidermek için tek bir düğüm kullanacaksak elasticsearch.yml dosyasına şu satırı ekledik:
    • :> discovery.type: single-node
      Sonra servisi restart ediyoruz. Bu sefer hata vermeyecek. sudo systemctl restart elasticsearch
  9. Ama bu sefer de herkes erişebiliyor. Sadece belirli IP’lerin erişmesi için; sudo ufw status
    komutu ile güvenlik duvarına baktık. Aktif değilse aktif etmeliyiz şu şekilde:
    sudo ufw enable
    Bunu yaparsak bizim bağantımız da gidecek. Onun uyarısını veriyor. O yüzden;
    sudo ufw allow 22/tcp
    Bunu yaptıktan sonra UBUNTU’yu yeniden başlattım. Bakalım dışarıdan erişimi kısıtladık teyit edelim.
    sudo ufw enable
    Açıldıktan sonra belirli IP adreslerine izin verip tekrar deniyoruz.
    sudo ufw allow from abc.abc.abc.abc to any port 9200
    sudo ufw status

    komutu ile güvenlik duvarı ayarlarını da kontrol ettik, her şey sağlam.

Elasticsearch kurulumu burada bitti.

Şimdi LOGSTASH kuracağız.

  1. Paket yöneticisini güncelleyip logstash paketini yüklemek için;
    • sudo apt update
      sudo apt install logstash
  2. LOGSTASH için bir konfigürasyon dosyasına ihtiyacımız var. Oluşturmak için;
    • sudo nano /etc/logstash/conf.d/ectaro-logstash.conf input {
      http {
      host => "0.0.0.0" # Loglari dinlemek icin kullanilan IP adresi
      port => 5044 # Gelen loglarin dinleneceği port
      }
      } filter {
      json {
      source => "message"
      }
      if [appcode] == "InApi" {
      mutate {
      add_field => { "application" => "inapi" }
      }
      } else if [appcode] == "OutApi" {
      mutate {
      add_field => { "application" => "outapp" }
      }
      } else if [appcode] == "UserApp" {
      mutate {
      add_field => { "application" => "userapp" }
      }
      } else if [appcode] == "Admin app" {
      mutate {
      add_field => { "application" => "adminapp" }
      }
      } else {
      mutate {
      add_field => { "application" => "unknownapp" }
      }
      }
      } output {
      elasticsearch {
      hosts => ["localhost:9200"]
      index => "%{[application]}-logs-%{+YYYY.MM.dd}"
      }

      } Konfigürasyonu bu kadar detaylı yapmadan doğrudan tüm logları tek bir indekse atıp appcode alanından filtrelemek de mümkün.
      O şekilde yaptım. POSTMAN’dan aşağıdaki gibi bir istek gönderdiğimizde sonuç başarılı olacaktır.
      {
      "timestamp": "2024-12-02T12:00:00Z",
      "appcode": "OutApi",
      "content": "This is a test log message",
      "level": "INFO"
      }
  3. 5044 portuna da izin vermek için;
    • sudo ufw allow from abc.abc.abc.abc to any port 5044
  4. Servis olarak başlamasını sağlamak için;
    • sudo systemctl status logstash
      komutu ile kontrol ettik aktif değil.
      sudo systemctl enable logstash
      komutu ile otomatik başlamasını ayarladık. Arkadaş, “/etc/logstash/conf.d/” klasöründeki tüm
      *.conf dosyalarını kullanacak şekilde yapılandırmış kendisini. O yüzden özel bir *.conf dosyası belirtmedik.
  5. LOGSTASH’taki hataları görmek için;
    • sudo journalctl -u logstash
      sudo nano /var/log/logstash/logstash-plain.log
      sudo systemctl restart logstash
  6. Elasticsearch ayar dosyasında da iki değişiklik yapmak için;
    • sudo nano /etc/elasticsearch/elasticsearch.yml
      action.auto_create_index: true # bu satırı ekledim. her gün yeni bir indeks oluşturacak Logstash.
      ingest.geoip.downloader.enabled: false # bu satırı ekledim. geoip indeksine ihtiyacımız yok.
  7. Her gün için bir indeks oluşturacak arkadaş. Bu indekslerin de yedeklemek için farklı node istiyor.
    Biz de tek node olduğundan her seferinde NODE sağlığı sarı olmasın diye aşağıdaki gibi bir template oluşturduk.
    Böylece her seferinde yedeksiz bir şekilde oluşturacak. Bunun için;
    • curl -X PUT "abc.abc.abc.abc:9200/_template/inapi_logs_template" -H 'Content-Type: application/json' -d '{
      "index_patterns": ["-logs-"],
      "settings": {
      "number_of_replicas": 0
      }
      }'

Logstash kurulumu burada bitti.

Şimdi KIBANA kuracağız.

  1. Elasticsearch için depolar eklediğimiz için burada bir daha eklemeye gerek yok. Kibana’yı yüklemek için;
    • sudo apt-get update
      sudo apt-get install kibana
  2. Kurulumdan sonra yapılandırma da gerekiyor. Bunun için;
    • sudo nano /etc/kibana/kibana.yml
      server.host: …. satırını açtım
      elasticsearch.hosts: … satırını açtım.
  3. Kurduktan sonra açılışta servis olarak çalışması için;
    • sudo systemctl enable kibana
      sudo systemctl start kibana Kibana'nın durumunu kontrol etmek için; sudo systemctl status kibana
  4. Yerel ağdaki bir IP bloğuna komple yetki vermek için;
    • sudo ufw allow from 10.0.0.0/24 to any port 9200
      sudo ufw allow from 10.0.0.0/24 to any port 5044
      sudo ufw allow from 10.0.0.0/24 to any port 5601
  5. Zaman zaman farklı yerlerden bağlanmam gerektiğinde şu şekilde IP’lere izin tanımlıyorum güvenlik duvarında şu şekilde;
    • sudo ufw allow from abc.abc.abc.abc to any port 9200 >>>> Elasticsearch için
      sudo ufw allow from abc.abc.abc.abc to any port 5044 >>>> Logstash için
      sudo ufw allow from abc.abc.abc.abc to any port 5601 >>>> Kibana için
  6. Sonra da bunları temizliyorum işim bitince şu şekilde;
    • sudo ufw delete allow from abc.abc.abc.abc to any port 9200
      sudo ufw delete allow from abc.abc.abc.abc to any port 5044
      sudo ufw delete allow from abc.abc.abc.abc to any port 5601

Selamlar.

Zamanında Altın Alsaydık… | C#

Zamanında Altın Alsaydık… | C#

Merhaba, zaman zaman sohbetlerimizde, geçmişte yapılan bir yatırım veya harcama mevzusu geçtiğinde; “O parayı o zaman dolara yatırsaydım acaba şimdi ne kadar olurdu?” ya da “Keşke altın alsaydık şimdi daha fazla kâr elde ederdik…” gibi iddialar ortaya atılır ve bazen de bunları doğrulamaya uğraşmayız. O